我是nodejs的新手。我没有在前1中看到响应,但我在前2中看到了。为什么?等待使用babel在其他地方为我工作。
例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和es7功能所需的模块。例如,await在squelize call中工作,我验证了。但它不适用于请求调用。为什么?
你应该只对返回Promise的东西进行await
。在你开始使用async
和await
之前,我肯定会建议阅读Promises。您可以通过围绕request
创建自己的包装函数来使这个示例工作,以使其返回一个promise,如下所示:
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
用法: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)
})
})
正如@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);
但是:Kua zxsw指出