我是nodejs的新手。我没有在前1中看到响应,但我在前2中看到了。为什么?等待使用babel在其他地方为我工作。
Ex 1
let res = await request(url)
console.log(res);
console.log(res.body);
Ex 2
request(url, function (error, res, body) {
if (!error && response.statusCode == 200) {
console.log(body)
}
});
等待在其他地方工作,我正在使用babel和es6和es7功能所需的模块。例如,await在squelize call中工作,我验证了。但它不适用于请求调用。为什么呢?
答案 0 :(得分:83)
你应该只对{1}}返回一个Promise。在你开始使用await
和async
之前,我肯定会建议您阅读Promise。您可以通过在await
周围创建自己的包装函数来使这个示例工作,以使其返回一个承诺,如下所示:
request
编辑:或者,您可以考虑使用request-promise而不是常规请求模块。
答案 1 :(得分:16)
<强> ES6 强>
用法: request
为require('./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)
}
}
<强>代码:强>
// await-request.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)
})
})
答案 2 :(得分:1)
尝试以下NPM软件包
var url = "http://www.google.com";
try
{
const response = await fetch(url);
const json = await response.json();
return {message:json.message,status:json.type};
}
catch(error)
{
console.log(error);
}
希望它能起作用。
答案 3 :(得分:0)
如@saadq所说,您只能“等待”返回Promise的函数。
我喜欢使用Node.js的util
包来实现带有回调的函数。因此,util
+ request
可以这样使用:
const util = require('util')
const request = require("request");
const requestPromise = util.promisify(request);
const response = await requestPromise(url);
console.log('response', response.body);
演示:https://runkit.com/mhmtztmr/node-js-request-with-async-await