Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么最后两个功能可以工作,而第一个功能不行?_Javascript_Node.js_Promise - Fatal编程技术网

Javascript 为什么最后两个功能可以工作,而第一个功能不行?

Javascript 为什么最后两个功能可以工作,而第一个功能不行?,javascript,node.js,promise,Javascript,Node.js,Promise,我有三个不同的函数,它们应该做同样的事情,用解析的承诺填充数组,但是对于第一个示例来说,它不起作用 这是我的密码: (异步()=>{ 常量项=[]; const someFn=async()=>{ const v=等待承诺。解决(10); items.push(Math.random()); 返还承诺。决议(v*10); } 常数arr=[]; for(设i=0;i{ 常量项=[]; const someFn=async()=>{ const v=等待承诺。解决(10); items.push

我有三个不同的函数,它们应该做同样的事情,用解析的承诺填充数组,但是对于第一个示例来说,它不起作用

这是我的密码:

(异步()=>{
常量项=[];
const someFn=async()=>{
const v=等待承诺。解决(10);
items.push(Math.random());
返还承诺。决议(v*10);
}
常数arr=[];
for(设i=0;i<10;i++){
arr.push(someFn);
}
等待承诺。全部(arr);
控制台日志(“项目1”,项目);
})();
(异步()=>{
常量项=[];
const someFn=async()=>{
const v=等待承诺。解决(10);
items.push(Math.random());
返还承诺。决议(v*10);
}
常量arr=[…数组(10).keys()].map(someFn)
等待承诺。全部(arr);
控制台日志(“项目2”,项目);
})();
(异步()=>{
常量项=[];
const someFn=async()=>{
const v=等待承诺。解决(10);
items.push(Math.random());
返还承诺。决议(v*10);
}
for(设i=0;i<10;i++){
等待某件事;
}
控制台日志(“项目3”,项目);

})()
您正在按
someFn
但您想要
someFn()
。注意,我们正在调用函数。

这是因为在第一个示例中,
someFn
从未执行:

for (let i = 0; i < 10; i++) {
    arr.push(someFn);
}
await Promise.all(arr);
这将使用10次执行的
someFn
填充
arr
数组(
map
使用当前值(0-9)、索引(也是0-9)和数组本身执行它们)


在javascript中,承诺是如何工作的,这让人非常困惑。哈哈,谢谢你,是的,有时候会有这种感觉;-)
const arr = [...Array(10).keys()].map(someFn)
for (let i = 0; i < 10; i++) {
    await someFn();
}