从回调中设置全局变量

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 */)
]);