我想做的是在使用 array.map 之后运行一个函数。理论上,我应该能够在 array.map 之后运行。但是,由于某种原因,它在 array.map 完成之前运行该函数。我该如何解决?
这是我的代码。
var channelIds = channelNames.map(function (name) {
request(`https://www.googleapis.com/youtube/v3/channels?key=${key}&forUsername=${name}&part=id`, function (error, response, body) {
if (error) {
callback(error);
} else {
var data = JSON.parse(body);
if (data.items.length == 0) {
callback(`Error: No channel id found for ${name}`);
} else {
return data.items[0].id;
}
}
});
});
function test() {
console.log(channelIds);
}
test();
EDIT:
建议的一种方法是使用async.map
。由于某种原因,它不想像文档所说的那样运行指定的回调函数。
我现在就是这样做的。
async.map(channelNames, function (name) {
request(`https://www.googleapis.com/youtube/v3/channels?key=${key}&forUsername=${name}&part=id`, function (error, response, body) {
if (error) {
callback(error);
} else {
var data = JSON.parse(body);
if (data.items.length == 0) {
callback(`Error: No channel id found for ${name}`);
} else {
return data.items[0].id;
}
}
});
}, function (error, results) {
console.log(results);
});
文档:https://caolan.github.io/async/docs.html#map https://caolan.github.io/async/docs.html#map
在调用测试方法之前使用 Promise.all 解析所有异步函数怎么样?
尝试这个 :
const promiseArray = channelNames.map(function (name) {
return new Promise(function (resolve, reject) {
request(`https://www.googleapis.com/youtube/v3/channels?key=${key}&forUsername=${name}&part=id`, function (error, response, body) {
if (error) {
callback(error); return reject(error);
} else {
var data = JSON.parse(body);
if (data.items.length == 0) {
callback(`Error: No channel id found for ${name}`);
return reject(`Error: No channel id found for ${name}`);
} else {
return resolve(data.items[0].id);
}
}
});
});
});
Promise.all(promiseArray).then(function(channelIds) {
console.log(channelIds);
})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)