Javascript 异步迭代数组,然后返回数组?
我尝试异步遍历数组,然后希望将值从被调用函数推送到新数组 我有以下代码,但不知道如何处理这个Javascript 异步迭代数组,然后返回数组?,javascript,arrays,node.js,Javascript,Arrays,Node.js,我尝试异步遍历数组,然后希望将值从被调用函数推送到新数组 我有以下代码,但不知道如何处理这个 let companies = []; _.forEach(notProcessed, function(company) { companies.push(processThem(company)); }); return companies; 当然,当打印/返回公司时,我将收到一个空数组 提前感谢,感谢您的帮助 一种方法: var notProcessed = ['a', 'b', 'c'
let companies = [];
_.forEach(notProcessed, function(company) {
companies.push(processThem(company));
});
return companies;
当然,当打印/返回公司时,我将收到一个空数组
提前感谢,感谢您的帮助 一种方法:
var notProcessed = ['a', 'b', 'c'];
function processThem(company) {
// Example long process
return new Promise((resolve) => {
setTimeout(() => resolve(company), 500);
});
}
function processArrayAsync(notProcessed) {
var companies = [];
var promise = Promise.resolve();
for(let next of notProcessed) {
promise = promise
.then(() => processThem(next))
.then(company => companies.push(company));
}
return promise.then(() => companies);
}
processArrayAsync(notProcessed).then(console.log);
还有一种更好的方法使用es6中的新函数async
var notProcessed = ['a', 'b', 'c'];
async function processThem(company) {
// Example long process
return new Promise((resolve) => {
setTimeout(() => resolve(company), 500);
});
}
async function processArrayAsync(notProcessed) {
var companies = [];
for(let next of notProcessed) {
let res = await processThem(next);
companies.push(res);
}
return companies;
}
processArrayAsync(notProcessed).then(console.log);
我非常喜欢处理异步操作的第二种方法:)如果
processThem()
中包含异步代码,则需要创建promise数组,但也需要processThem()
返回一个promise,以便将其promise推送到数组中。然后在promises数组上使用Promise.all()
显示processThem()
的示例代码我将收到一个空数组
-不,您应该得到一个与notProcessed
数组一样长的数组,只是数组中的值可能都是未定义的
,或者无论什么processThem
returnsasumingprocessThem()
中包含异步代码,我们都需要看到实际的函数为您提供最好的帮助,因为这是您需要做一些不同事情的第一步。请向我们展示代码,以便我们提供帮助。