让我们承诺在返回之前等待几秒钟

时间:2017-03-01 10:39:25

标签: javascript node.js express promise

我有一个返回承诺的函数。在此功能中,我们呼叫第三方供应商通过其服务器发送一些推送通知。

看起来像

apiGetLoggedInUser.then(
  user => {
    return sendMessage(user.name);
  }
)

然而事情是我们决定等待3秒才真正调用这个sendMessage函数。但是我们宁愿不更改sendMessage,因为它已经提供了。

我想知道如何在这种情况下真正做“等待”部分,因为promise用于删除“同步”操作。

我理解正确吗?我该怎么办?

4 个答案:

答案 0 :(得分:9)

在链中插入另一个延迟下一个的承诺:

apiGetLoggedInUser
    .then(user => {
        return new Promise(resolve => setTimeout(() => resolve(user), 3000));
    })
    .then(user => sendMessage(user.name))

答案 1 :(得分:3)

一种不同的方法 - 如果你想在很多地方做这类事情很有用

此位完成一次

Promise.prototype.thenWait = function thenWait(time) {
    return this.then(result => new Promise(resolve => setTimeout(resolve, time, result)));
};

然后你可以在任何地方使用它,就像这个用法一样

apiGetLoggedInUser.thenWait(3000).then(user => sendMessage(user.name));

答案 2 :(得分:2)

简短版本:

function wait(milliseconds) {
  return new Promise(resolve => setTimeout(resolve, milliseconds));
}

示例:

async function myFunc(user) {
  await wait(3000);

  sendMessage(user.name);
}

答案 3 :(得分:1)

创建新的承诺,在超时后调用sendMessage

apiGetLoggedInUser.then(
  user => {
    return new Promise((resolve, reject) => {
       setTimeout(() => {
          sendMessage(user.name).then(resolve, reject);
       }, 3000)
    });
  }
)