让我们等待几秒钟后再回来
我有一个函数返回一个承诺。 在这个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));