Node.js中Express框架使用axios同步请求(async+await)实现方法
短信预约 -IT技能 免费直播动态提醒
axios一般是作为异步请求使用的,但是某种特殊情况下需要同步请求,如何实现呢?
首先定义一个方法syncAxios
let axios = require('axios');
exports.syncAxios = function (obj = {}) {
let url = "http://www.rrbay.com/api/";
return new Promise((resolve, reject) => {
axios(url, {
method: 'POST',
timeout: 5000,
params: {
sProcName: obj.sProcName,
idNo: obj.id,
userName: obj.qq,
overTime: obj.endTime
}
}).then((res) => {
resolve(res.data);
}).catch((error) => {
reject(error)
})
})
};
然后在controllers 调用
exports.check = function (req, res) {
//定义async方法体
XXXMode.findById(id).populate('author').exec(async function (err, result) {
let dataCode = false;
if(result.status ==0){
//同步调用
await baseapi.syncAxios({
sProcName: 'Update',
id: '000000-1111-2222-3333-9999999',
qq: '391502069',//result.author.name,
endTime: '2022/12/31 11:39:05'//result.EndTime
}).then((data) => {
console.log(data, 'res');
}).catch((err) => {
console.log(err && err.stack);
});
}
result.save(function (err, onewxtob) {
if (req.xhr) {
return res.json({
status: !err
})
}
});
});
};
view中使用模板引擎jade,需要在请求check
后,延迟刷新页面显示请求结果
setTimeout(function () {
$(location).attr('href',window.location.href)
}, 1000)
这里的setTimeout实现了延迟加载刷新页面的效果,结合控制器的交互,最终实现了同步操作的效果。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341