2016-07-18 6 views
12

Ich bin neu bei Nodejs. Ich sehe die Antwort in Ex 1 nicht, aber ich sehe in Ex 2. Warum? Erwartet für mich an anderen Orten, mit Babel.Warum warten, funktioniert nicht für Knoten Request-Modul?

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) 
} 
}); 

Await arbeitet in anderen Orten, ich bin mit babel und benötigten Module für es6 und ES7 Funktionen. Zum Beispiel warten in Calls quälen, ich validiert. Aber es funktioniert nicht für Anforderungsaufruf. Warum?

+0

FYI, 'async/await' ist nicht Teil des ES7. Es ist immer noch nur ein Vorschlag. –

+0

Siehe meine Antwort [hier] (http://stackoverflow.com/a/38252603/2410379). Außerdem ist [this] (https://tc39.github.io/ecmascript-asyncawait/#async-function-definitions) hilfreich. –

Antwort

27

Sie sollten nur await auf etwas, das ein Versprechen zurückgibt. Ich würde definitiv empfehlen auf Promises zu lesen, bevor Sie mit async und await arbeiten. Sie können sich wahrscheinlich in diesem Beispiel erhalten, indem Sie Ihre eigenen Wrapper-Funktion um request zu arbeiten, um es ein Versprechen zu machen zurückkehren, etwa so:

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: Alternativ können Sie request-promise anstelle des regulären Anforderungsmodul Blick in Verwendung.

+1

sollte dies die Antwort sein – felipekm

8

ES6

Verbrauch: Wo requestrequire('./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 ist:

// 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) 
     }) 
    }) 
Verwandte Themen