发送HTTP推送通知后调用Process.exit()不生效问题如何解决
问题原因
你的pushNotification函数虽然标记为async,但内部使用的是回调风格的request调用,没有返回等待请求完成的Promise,所以await pushNotification()会立刻执行完成,不等HTTP请求发送、返回就触发了process.exit(),直接终止进程导致请求没发出去。
修复方案
方案1:改造pushNotification为Promise风格
把回调逻辑包裹成Promise返回,这样await就能正确等待请求结束再执行退出逻辑:
await page .waitForSelector(".guest", { timeout: 5000 }) .then(async () => { console.log("Not logged in, exiting"); await pushNotification("App has stopped, probably session expired."); process.exit(); }) async function pushNotification(msg) { return new Promise((resolve, reject) => { var options = { method: "POST", url: "url", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ to: "", title: "", body: msg, }), }; request(options, function (error, response) { if (error) { console.error('推送发送失败', error) reject(error) return }; console.log(response.body); resolve(response.body) }); }) }
方案2:使用原生支持Promise的请求库
如果可以更换依赖,推荐用axios、node-fetch这类原生返回Promise的请求库,不需要自己封装回调逻辑,示例用axios实现如下:
const axios = require('axios') async function pushNotification(msg) { const res = await axios.post('你的请求地址', { to: "", title: "", body: msg, }, { headers: { "Content-Type": "application/json", } }) console.log(res.data) return res.data }
内容的提问来源于stack exchange,提问作者lmoonwolf
相关产品推荐
相关产品推荐

