从回调中设置全局变量
Set Global Variable from Callback
首先我需要使用 'request' 获取数据,然后将响应添加到变量 firstData :
var request = require('request');
let firstData,otherData = '';
request({
url: 'https://someurl.extension/get/data',
method: "POST",
json: true,
body: {}
},(error, response) => {
firstData = response;
})
然后我再次请求获取其他数据的值:
request({
url: 'https://someurl.extension/get/otherdata',
method: "POST",
json: true,
body: {}
},(error, response) => {
otherData = response;
})
然后渲染它们
res.json({firstData,otherData})
但什么也没有出现,因为异步无法做到这一点。有人说应该由 'callback' 完成,但如果我需要发出 5 个或更多请求怎么办?会有5个回调,代码也不美了。
有什么办法吗?或者有什么办法可以响应全局变量?类似于 reactjs 中的 setState()
。
谢谢
您可以承诺 request
或只使用 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 */)
]);
首先我需要使用 'request' 获取数据,然后将响应添加到变量 firstData :
var request = require('request');
let firstData,otherData = '';
request({
url: 'https://someurl.extension/get/data',
method: "POST",
json: true,
body: {}
},(error, response) => {
firstData = response;
})
然后我再次请求获取其他数据的值:
request({
url: 'https://someurl.extension/get/otherdata',
method: "POST",
json: true,
body: {}
},(error, response) => {
otherData = response;
})
然后渲染它们
res.json({firstData,otherData})
但什么也没有出现,因为异步无法做到这一点。有人说应该由 'callback' 完成,但如果我需要发出 5 个或更多请求怎么办?会有5个回调,代码也不美了。
有什么办法吗?或者有什么办法可以响应全局变量?类似于 reactjs 中的 setState()
。
谢谢
您可以承诺 request
或只使用 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 */)
]);