【发布时间】:2019-11-17 05:38:27
【问题描述】:
我希望我的函数执行 X(=3) 次直到成功。
我知道这个问题看起来类似于 this question,但这些答案都没有帮助。
我只想将此消息发送给 slack,如果失败则重试 3 次。
const options = {
'text': 'Hello'
}
let flag = 0
function sendMessage () {
const promise = new Promise((resolve, reject) => {
axios.post(webhookURL, JSON.stringify(options))
.then(response => {
flag++
return resolve('SUCCESS: Sent slack webhook', response.data)
})
.catch(error => {
return reject(new Error('FAILED: Sent slack webhook', error))
})
})
return promise
}
for (let maxRetry = 0; maxRetry < 3; maxRetry++) {
const p = sendMessage()
p
.then((status) => {
console.log(status)
})
.catch((err) => {
console.log(err)
})
console.log('flag', flag)
if (flag >= 1) {
break
}
}
成功后也运行了3次。承诺无法正常工作 输出
flag 0
flag 0
flag 0
SUCCESS: Sent slack webhook
SUCCESS: Sent slack webhook
SUCCESS: Sent slack webhook
我是 nodejs 的新手。如果你们中的任何人可以在这里帮助我,将会非常有帮助。
【问题讨论】:
-
我更新了问题。请再看一遍。我被困在这里。如果失败,则失败 3 次,如果运行,则运行 3 次。第一次成功后它不会停止。
-
问题是循环在标志甚至更新一次之前就完成了,因为它是异步执行,这就是为什么你把所有标志都设为 0 .... 所以标准循环不会工作在这个例子中
-
那么我应该怎么做才能正确运行它。我怎样才能使它同步。您能否写一个答案以使其正常工作。
-
在我的回答中查看解决方案
标签: node.js promise callback async-await slack-api