我是Node JS编码的新手,我的代码中有两个函数,我已经使用async关键字进行了异步处理,但问题是它不起作用,第二个函数的输出在第一个函数之前出现,但是我想要下面给出的第二个函数之前的第一个函数的输出是我的代码
var request = require("request").defaults({jar: true});
var cookieJar = request.jar();
var options = { method: 'POST',
url: 'http://69.30.210.130:8082/api/session',
headers:
{ 'content-type': 'application/x-www-form-urlencoded' },
form: { email: 'admin', password: 'admin' } };
request(options, async function (error, response, body) {
if (error) throw new Error(error);
let bod=await body;
console.log(bod)
});
var options = { method: 'GET',
url: 'http://69.30.210.130:8082/api/devices',
qs: { id: '1' },
headers:
{ 'postman-token': '021a3566-e1ea-4dd4-4ceb-c81ecd25ddd1',
'cache-control': 'no-cache' } };
request(options, function (error, response, body) {
if (error) throw new Error(error);
console.log(body);
});
答案 0 :(得分:1)
request
默认使用回调,这意味着当您要链接多个请求时,必须采用以下方式:
// first request
request({...}, function(error, response, body1) {
if (error) return console.error('Error', error.message);
// second request
request({...}, function(error, response, body2) {
if (error) return console.error('Error', error.message);
console.log(body1, body2);
});
});
async/await
旨在简化使用Promise的工作,因此您可以使用request-promise
:
const rp = require('request-promise');
(async function() { // await can be called only from within an async func
try {
const body1 = await rp({...}); // first request
const body2 = await rp({...}); // second request
console.log(body1, body2);
} catch (e) {
console.error('Error', e.message);
}
})();
在这里,body2
将在解决body1
之后得到解决。这意味着async/await
将同步行为带入异步处理。
您可以直接使用基于承诺的axios
。
编辑:从回调中删除async
,添加axios
参考