让我们等待几秒钟后再回来

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

看起来像

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

不过,我们决定等3秒后再调用sendMessage函数。 但是,我们不想改变sendMessage,因为它提供了。

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

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

在延期下一个链条插入另一个承诺:

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

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

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

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

这一点完成一次

 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));