edd*_*xie 8 javascript node.js promise express
我有一个函数返回一个承诺.在此功能中,我们呼叫第三方供应商通过其服务器发送一些推送通知.
看起来像
apiGetLoggedInUser.then(
user => {
return sendMessage(user.name);
}
)
Run Code Online (Sandbox Code Playgroud)
然而事情是我们决定等待3秒才真正调用这个sendMessage函数.但是我们宁愿不更改sendMessage,因为它已经提供了.
我想知道如何在这种情况下真正做"等待"部分,因为promise用于删除"同步"操作.
我理解正确吗?我该怎么办?
Dar*_*ron 12
简短版本:
function wait(milliseconds) {
return new Promise(resolve => setTimeout(resolve, milliseconds));
}
Run Code Online (Sandbox Code Playgroud)
例子:
async function myFunc(user) {
await wait(3000);
sendMessage(user.name);
}
Run Code Online (Sandbox Code Playgroud)
dec*_*eze 11
在链中插入另一个延迟下一个的承诺:
apiGetLoggedInUser
.then(user => {
return new Promise(resolve => setTimeout(() => resolve(user), 3000));
})
.then(user => sendMessage(user.name))
Run Code Online (Sandbox Code Playgroud)
一种不同的方法 - 如果你想在很多地方做这种事情,很有用
这一点做一次
Promise.prototype.thenWait = function thenWait(time) {
return this.then(result => new Promise(resolve => setTimeout(resolve, time, result)));
};
Run Code Online (Sandbox Code Playgroud)
然后你可以在任何地方使用它,就像你的例子一样
apiGetLoggedInUser.thenWait(3000).then(user => sendMessage(user.name));
Run Code Online (Sandbox Code Playgroud)
sendMessage
创建新的承诺,该承诺将在超时后调用。
apiGetLoggedInUser.then(
user => {
return new Promise((resolve, reject) => {
setTimeout(() => {
sendMessage(user.name).then(resolve, reject);
}, 3000)
});
}
)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6413 次 |
最近记录: |