Javascript 使用承诺创建延迟承诺

Javascript 使用承诺创建延迟承诺,javascript,Javascript,嘿,伙计们,我有一个js承诺问题,但它给了我错误 function delay(n) { return new Promise((resolve) => setTimeout(resolve, n*1000)); } 这应该是说现在是2秒后,然后是1.5秒后,但它说 它现在未在以后定义 它现在是未定义的 您没有包含解析值;将setTimeout(resolve更改为setTimeout(function(){resolve(n);}接受多个参数 setTimeout(函数,毫秒,

嘿,伙计们,我有一个js承诺问题,但它给了我错误

function delay(n) {
    return new Promise((resolve) => setTimeout(resolve, n*1000));
}
这应该是说现在是2秒后,然后是1.5秒后,但它说

它现在未在以后定义
它现在是未定义的


您没有包含解析值;将
setTimeout(resolve
更改为
setTimeout(function(){resolve(n);}
接受多个参数

setTimeout(函数,毫秒,参数1,参数2,…)
因此,在将第二个
setTimeout
参数设置为要等待的毫秒数后,可以传递任何其他参数

所以改变

setTimeout(resolve, n*1000)

功能延迟(n){
返回新承诺((resolve)=>setTimeout(resolve,n*1000,n));
}
延迟(2)
.then(seconds=>console.log(`It now是${seconds}seconds later`)
.然后(()=>延迟(5))

.then(seconds=>console.log(`It now is${seconds}seconds later`);
setTimeout
没有将任何值传递给
resolve
,因此解析值是
未定义的
。核心问题是OP的代码不包含解析值。Protip:
setTimeout(resolve,n*1000,n)
…我的问题是,这不是等待打印的秒数。与第一个一样。然后,它应该等待2秒打印该消息,然后等待1.5秒打印下一个消息,并且Idk在何处添加延迟,因为在解析内或解析后执行*1000操作不起作用work@Christian
返回新承诺(res=>setTimeout(res,n*1000,n))
。这是有效的。如果不行,你需要显示你的实际代码。你问题中的代码应该已经正确延迟了,你只是没有传递
n
的值。这个答案解决了这个问题。重构了我的答案以记录。
setTimeout(resolve, n*1000)
setTimeout(resolve, n*1000, n)