Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.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 函数中的承诺get error不是函数错误_Javascript_Ecmascript 6_Lodash - Fatal编程技术网

Javascript 函数中的承诺get error不是函数错误

Javascript 函数中的承诺get error不是函数错误,javascript,ecmascript-6,lodash,Javascript,Ecmascript 6,Lodash,我尝试将10的插入逐个打印到数组中 const obj = [] const delay = (timer, num) => setTimeout(() => Promise.resolve(num), timer) _.times(10).map(o => { delay(1000, o).then(num => console.log(obj.push(num))) }) 但我得到了延迟,那不是函数错误吗?或者我甚至不需要在这里使用Promise,因为s

我尝试将10的插入逐个打印到数组中

const obj = []
const delay = (timer, num) => setTimeout(() => Promise.resolve(num), timer)

_.times(10).map(o => {

  delay(1000, o).then(num => console.log(obj.push(num)))

})


但我得到了延迟,那不是函数错误吗?或者我甚至不需要在这里使用Promise,因为setTimeout本身已经是一个Promise了?

它抱怨
deplay(…)。然后
不是一个函数-
deplay
不会返回一个Promise。您需要使用承诺构造函数,而不是
Promise.resolve

(同时,将
deplay
更改为
delay
:)

const obj=[]
const delay=(timer,num)=>新承诺(resolve=>setTimeout(()=>resolve(num,timer))
_.times(10).map(o=>{
延迟(1000,o)。然后(num=>console.log(obj.push(num)))
})

逐个打印,假设您指的是每秒打印一次(根据回答中的注释)

const obj=[]
const delay=(timer,num)=>新承诺(resolve=>setTimeout(resolve,timer,num));
设p=Promise.resolve();
_.times(10).map(o=>{
p=p
.然后(()=>延迟(1000,o))
.然后(num=>console.log((obj.push(num+1),obj+'');
})

您的延迟函数返回setTimeout返回值,这不是承诺。。。您需要将setTimeout嵌套在一个承诺中
const delay=(timer,num)=>new Promise(resolve=>setTimeout(resolve,timer,num))
setTimeout()
返回一个计时器引用…没有承诺。
setTimeout本身已经是一个承诺了
-no
setTimeout(()=>resolve(num,timer)
。。。或者
setTimeout(resolve,timer,num)
对于酷孩子:如果你重写了代码,那么,当然。。。只是不要使用
。然后如果你不使用
承诺
-我的建议是代码的setTimeout部分这不会逐个打印one@AlisaF.Kennedy如果您希望能够调用
然后
查看结果,那么您确实需要一个承诺,他只是建议另一种方式来传递论点你的原始代码有缺陷-你根本没有把承诺链接起来