为什么等待不起作用的节点请求模块?

我是nodejs的新手。 我没有看到前1的反应,但我看到前2。为什么? 等待在其他地方为我工作,使用巴贝尔。

例1

let res = await request(url) console.log(res); console.log(res.body); 

例2

 request(url, function (error, res, body) { if (!error && response.statusCode == 200) { console.log(body) } }); 

等待在其他地方工作,我使用babel和es6和es7function所需的模块。 例如,等待在squelize电话的工作,我validation。 但它不适用于请求调用。 为什么?

       

网上收集的解决方案 "为什么等待不起作用的节点请求模块?"

你只应该await返回Promise的东西。 我肯定会推荐阅读Promise之前,开始使用asyncawait 。 你也许可以通过围绕request创build你自己的包装函数来使这个例子工作,使它返回一个承诺,如下所示:

 function doRequest(url) { return new Promise(function (resolve, reject) { request(url, function (error, res, body) { if (!error && res.statusCode == 200) { resolve(body); } else { reject(error); } }); }); } // Usage: async function main() { let res = await doRequest(url); console.log(res); } main(); 

编辑:或者,你可以看看使用request-promise而不是常规的请求模块。

ES6

用法: requestrequire('./await-request')

 const init = async () => { try { const result = await request({ uri: 'statdirectory/exchange?json', baseUrl: 'https://bank.gov.ua/NBUStatService/v1/', json: true }) console.log(result) } catch (err) { console.error(err) } } 

码:

 // request-service.js const request = require('request') module.exports = async (value) => new Promise((resolve, reject) => { request(value, (error, response, data) => { if(error) reject(error) else resolve(data) }) })