如何从array.map中的异步函数返回值,我试图从它们中访问值,但是却得到数组[[object Promise], [object Promise], [object Promise], [object Promise]]
?
我想在array1.map
内部进行异步处理,因为我有一些过程需要花费一些时间,因此我需要使用await。
var array1 = [1, 4, 9, 16];
// pass a function to map
const test = async ()=>{
const map1 = await array1.map(async x => 'hi');
return map1;
// expected output: Array [2, 8, 18, 32]
}
test().then((data)=>{
console.log(data)
})
预期输出:阵列['hi', 'hi', 'hi', 'hi']
我的输出:[[object Promise], [object Promise], [object Promise], [object Promise]]
答案 0 :(得分:0)
您需要使用Promise.all
函数,在其中放置承诺数组
var array1 = [1, 4, 9, 16];
// pass a function to map
const test = async () => {
const map1 = await Promise.all(array1.map(async x => 'hi'));
return map1;
}
test().then((data) => {
console.log(data)
});
预期输出:数组['hi','hi','hi','hi']
答案 1 :(得分:0)
解决方案1
如果在地图高阶函数中放置等待,您将得到预期的结果
var array1 = [1, 4, 9, 16];
// pass a function to map
const test = async () => {
const map1 = await Promise.all(array1.map( async x =>await 'hi'));
return map1;
}
test().then((data) => {
console.log(data)
});
解决方案2
如果从高阶函数参数中删除异步,则将获得预期的输出。
var array1 = [1、4、9、16];
// pass a function to map
const test = async () => {
const map1 = await Promise.all(array1.map( x => 'hi'));
return map1;
}
test().then((data) => {
console.log(data)
});
答案 2 :(得分:0)
您可以使用async模块中的async.map。 async.map函数带有三个参数。