Je suis nouveau sur nodejs. Je ne vois pas la réponse dans l'ex 1, mais je vois dans l'ex 2. Pourquoi? Attendre fonctionne pour moi ailleurs, avec 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)
}
});
En attente de travaux dans d'autres endroits, j'utilise babel et les modules requis pour les fonctionnalités es6 et es7. Par exemple, attendre les travaux en appel squelize, j’ai validé. Mais cela ne fonctionne pas pour un appel de requête. Pourquoi?
Vous ne devriez que await
sur quelque chose qui retourne une promesse. Je recommanderais certainement de lire sur Promises avant de commencer à travailler avec async
et await
. Vous pouvez probablement obtenir cet exemple en créant votre propre fonction wrapper autour de request
pour lui faire renvoyer une promesse, comme ceci:
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();
Edit: Vous pouvez également utiliser request-promise au lieu du module de requête standard.
ES6
Utilisation: Où request
est 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)
}
}
Code:
// 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)
})
})
Comme @saadq le dit, vous ne pouvez "attendre" que les fonctions renvoyant Promise.
J'aime utiliser le package util
de Node.js pour promouvoir une fonction avec callback. Donc util
+ request
peut être utilisé comme ça:
const util = require('util')
const request = require("request");
const requestPromise = util.promisify(request);
const response = await requestPromise(url);
console.log('response', response.body);
Démo: https://runkit.com/mhmtztmr/node-js-request-with-async-await
Essayez avec le package NPM suivant
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);
}
Esperons que ça marche.