我希望我的函数执行 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次。 promise 无法正常运作 输出
flag 0
flag 0
flag 0
SUCCESS: Sent slack webhook
SUCCESS: Sent slack webhook
SUCCESS: Sent slack webhook
我是nodejs新手。如果你们中的任何人能在这里帮助我,那将非常有帮助。
最佳答案
有一个使用 async/await
功能的解决方案,这将允许您在运行对异步函数的另一个调用之前等待 Promise 解析
成功示例:
//const axios = require('axios');
function sendMessage() {
return new Promise((resolve, reject) => {
axios
.get('https://jsonplaceholder.typicode.com/posts/1')
.then(response => {
resolve('SUCCESS: Sent slack webhook', response.data);
})
.catch(error => {
reject(new Error('FAILED: Sent slack webhook', error));
});
});
}
(async function loop() {
for (let i = 0; i < 3; i++) {
console.log('loop count = ', i);
try {
const res = await sendMessage();
console.log(res);
break;
} catch (error) {
console.log(error);
}
}
})();
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
错误示例:
//const axios = require('axios');
function sendMessage() {
return new Promise((resolve, reject) => {
axios
.get('https://falseurl')
.then(response => {
resolve('SUCCESS: Sent slack webhook', response.data);
})
.catch(err => {
console.log('FAILED: Sent slack webhook')
reject(new Error('FAILED: Sent slack webhook', err));
});
});
}
(async function loop() {
for (let i = 0; i < 3; i++) {
console.log('loop count = ', i);
try {
const res = await sendMessage();
console.log(res);
break;
} catch (err) {
console.log(err);
}
}
})();
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
关于node.js - nodejs sendMessage 函数如果失败 X 次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56922490/