Javascript 函数中的承诺get error不是函数错误
我尝试将10的插入逐个打印到数组中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
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本身已经是一个承诺了
-nosetTimeout(()=>resolve(num,timer)
。。。或者setTimeout(resolve,timer,num)
对于酷孩子:如果你重写了代码,那么,当然。。。只是不要使用。然后如果你不使用承诺
-我的建议是代码的setTimeout部分这不会逐个打印one@AlisaF.Kennedy如果您希望能够调用然后
查看结果,那么您确实需要一个承诺,他只是建议另一种方式来传递论点你的原始代码有缺陷-你根本没有把承诺链接起来