多次延迟调用承诺 Bluebird.js

Calling a promise multiple times with delay Bluebird.js

现在我有

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

这正是我想要的,多次调用 promise 然后 resolve。

但是我想在 promise 之间添加一个延迟,所以我想要: 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 的 resolve 数据,这个 returns 函数: Getting user info [Function]

提前致谢!

延迟是一个承诺,而不是一个承诺构造函数。所以你可以像使用任何其他承诺一样使用 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>