【问题标题】:creating a delay promise using promises [duplicate]使用承诺创建延迟承诺[重复]
【发布时间】:2021-03-22 15:34:52
【问题描述】:

大家好,我有一个 js 承诺问题,但它给了我错误

function delay(n) {
    return new Promise((resolve) => setTimeout(resolve, n*1000));
}

这应该说现在是 2 秒后,然后现在是 1.5 秒后,但它说

现在未定义
现在未定义了

delay(2)
    .then(seconds => console.log(`It is now ${seconds} later`))
    .then(() => delay(1.5))
    .then(seconds => console.log(`It is now ${seconds} later`));

【问题讨论】:

  • setTimeout 没有将任何值传递给resolve,因此解析的值为undefined

标签: javascript


【解决方案1】:

您没有包含解析值;将setTimeout(resolve 更改为setTimeout(function() {resolve(n);}

【讨论】:

  • 核心问题是OP的代码不包含resolve值。
  • 专业提示:setTimeout(resolve, n * 1000, n)...
  • 我的问题是这并没有等待那几秒钟的时间来打印。与第一个 .thenm 一样,它应该等待 2 秒来打印该消息,然后等待 1.5 秒来打印下一个消息,并且 Idk 在哪里添加该延迟,因为在解析中或之后执行 *1000 不起作用
  • @Christian return new Promise(res => setTimeout(res, n * 1000, n))。这。这行得通。如果没有,您需要显示您的实际代码。您问题中的代码应该已经正确延迟,您根本没有通过 n 的值。这个答案解决了这个问题。
【解决方案2】:

setTimeout接受多个参数;

setTimeout(function, milliseconds, param1, param2, ...)

因此,在您将第二个setTimeout 参数设置为您要等待的毫秒数后,您可以传递任何其他参数;

所以改变

setTimeout(resolve, n*1000)

setTimeout(resolve, n*1000, n)

function delay(n) {
    return new Promise((resolve) => setTimeout(resolve, n*1000, n));
}
delay(2)
    .then(seconds => console.log(`It is now ${seconds} seconds later`))
    .then(() => delay(5))
    .then(seconds => console.log(`It is now ${seconds} seconds later`));

【讨论】:

  • 为记录重构了我的答案。
猜你喜欢
  • 2016-09-22
  • 2015-03-27
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 2017-04-26
  • 2015-03-08
  • 1970-01-01
相关资源
最近更新 更多