use*_*286 38 asynchronous node.js async-await ecmascript-next
我是nodejs的新手.我没有看到前1中的响应,但我在前2中看到了.为什么?等待使用babel在其他地方为我工作.
例1
let res = await request(url)
console.log(res);
console.log(res.body);
Run Code Online (Sandbox Code Playgroud)
例2
request(url, function (error, res, body) {
if (!error && response.statusCode == 200) {
console.log(body)
}
});
Run Code Online (Sandbox Code Playgroud)
等待在其他地方工作,我正在使用babel和es6和es7功能所需的模块.例如,await在squelize call中工作,我验证了.但它不适用于请求调用.为什么?
saa*_*adq 111
你应该只await
返回一个Promise的东西.在你开始async
和之合作之前,我肯定会建议你阅读Promises await
.您可以通过创建自己的包装函数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();
Run Code Online (Sandbox Code Playgroud)
编辑:或者,您可以查看使用请求承诺而不是常规请求模块.
dim*_*iax 18
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)
}
}
Run Code Online (Sandbox Code Playgroud)
码:
// 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)
})
})
Run Code Online (Sandbox Code Playgroud)
正如@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);
Run Code Online (Sandbox Code Playgroud)
演示:https : //runkit.com/mhmtztmr/node-js-request-with-async-await
归档时间: |
|
查看次数: |
52185 次 |
最近记录: |