首先,我需要使用“请求”来获取数据,然后将响应添加到变量firstData:
var request = require('request');
let firstData,otherData = '';
request({
url: 'https://someurl.extension/get/data',
method: "POST",
json: true,
body: {}
},(error, response) => {
firstData = response;
})
然后我发出另一个请求来获取 otherData 的值:
request({
url: 'https://someurl.extension/get/otherdata',
method: "POST",
json: true,
body: {}
},(error, response) => {
otherData = response;
})
然后将它们渲染为
res.json({firstData,otherData})
但什么也没有出现,因为异步不能做到这一点。有人说应该通过“回调”来完成,但是如果我需要发出 5 个或更多请求怎么办?会有5个回调,代码不再美观。
有什么办法可以做到这一点吗?或者有什么方法可以响应全局变量?类似reactjs中的setState()
。
谢谢。
最佳答案
您可以 promise 请求
或仅使用request-promise ,然后使用async/await
const request = require('request-promise');
app.get('/some-route', async(req, res) => {
// ^^ Notice async keyword
try {
const firstData = await request({
url: 'https://someurl.extension/get/data',
method: "POST",
json: true,
body: {}
});
const otherData = await request({
url: 'https://someurl.extension/get/otherdata',
method: "POST",
json: true,
body: {}
});
res.json({
firstData,
otherData
})
} catch (e) {
res.status(500);
res.send('Error');
}
});
如果你可以并行执行请求(如果它们不相互依赖),你可以使用Promise.all
const [firstData, secondData] = await Promise.all([
request(/* first request options */),
request(/* second request options */)
]);
关于node.js - 从回调中设置全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50936503/