【问题标题】:Calling a promise multiple times with delay Bluebird.js延迟多次调用承诺 Bluebird.js
【发布时间】:2018-08-15 15:42:58
【问题描述】:

我现在有

getUserInfo = (data) => {
    console.log('Getting user info')
    return new Promise((resolve, reject) => {
        if (data === 1)
        return resolve('Hello World')
        resolve(getUserInfo(1))
    })
}

getUserInfo().then(data => console.log(data))

这将 console.log Getting user info Getting user info Hello World

这正是我想要的,多次调用一个承诺然后解决。

但是我想在承诺之间添加一个延迟,所以我想要: Getting user Info Wait 1 second Getting user Info Hello World

我想使用 bluebird 的 Promise.delay。关于如何去的任何提示?

我试过了

getUserInfo = (data) => {
    console.log('Getting user info')
    return new Promise.delay(500,(resolve, reject) => {
        if (data === 1)
        return resolve('Hello World')
        resolve(getUserInfo(1))
    })
}

但作为 promise 的解析数据,这将返回函数: Getting user info [Function]

提前谢谢你!

【问题讨论】:

  • 注意不能“调用”promise,只能调用函数。
  • 避免使用Promise constructor antipattern!您应该将调用getUserInfo 的代码再次放入then 回调中。

标签: javascript bluebird


【解决方案1】:

延迟是一个承诺,而不是一个承诺构造函数。所以你可以像使用任何其他承诺一样使用 Promise.delay..

下面可能是你想要的 ->

const getUserInfo = (data) => {
    console.log('Getting user info')
    return new Promise((resolve, reject) => {
        if (data === 1) {
          return resolve('Hello World')
        }
        return Promise.delay(500).then(
           function ()  { resolve(getUserInfo(1)); }
        );
    })
}

getUserInfo().then(data => console.log(data))
<script src="https://cdnjs.cloudflare.com/ajax/libs/bluebird/3.5.1/bluebird.min.js"></script>

使用新的 async / await,可以让这样的事情变得更容易。

const getUserInfo =  async (data) => {
    console.log('Getting user info')
    if (data === 1) return "hello World";
    await Promise.delay(500);
    return getUserInfo(1);
}

getUserInfo().then(data => console.log(data))
<script src="https://cdnjs.cloudflare.com/ajax/libs/bluebird/3.5.1/bluebird.min.js"></script>

【讨论】:

    猜你喜欢
    • 2015-03-29
    • 2015-03-08
    • 2015-03-27
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 2016-09-03
    • 2013-09-11
    相关资源
    最近更新 更多