Почему ожидание не работает для модуля запроса node?
Я новичок в nodejs. Я не вижу ответа в ex 1, но я вижу в ex 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. Например, ждут работы в squelize call, я проверен. Но он не работает для запроса вызова. Почему?
Ответы
Ответ 1
Вы должны только await
на что-то, что возвращает Promise. Я определенно рекомендую читать Promises, прежде чем приступать к работе с async
и await
. Вероятно, вы можете заставить этот пример работать, создав свою собственную функцию-обертку вокруг request
, чтобы вернуть ее, например:
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 вместо обычного модуля запроса.
Ответ 2
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)
}
}
Код:
// 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)
})
})