2016-07-18 12 views
12

私はnodejsを初めて使っています。私はex 1でその反応を見ていないが、私はex 2で見る。なぜ?私はバベルを使って他の場所で働いています。ノード要求モジュールでawaitが機能しないのはなぜですか?

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

待つが、他の場所で働く私はES6とES7の機能のためにバベルと必要なモジュールを使用しています。例えば、待っているのはスケルティングコールで、私は検証済みです。しかし、それはリクエストコールでは機能しません。どうして?

+0

、 '非同期/ await'はES7の一部ではありません。それはまだ単なる提案です。 –

+0

私の答え[ここ](http://stackoverflow.com/a/38252603/2410379)を参照してください。さらに、[this](https://tc39.github.io/ecmascript-asyncawait/#async-function-definitions)も役に立ちます。 –

答えて

27

プロミスを返すものにはawaitのみを入力してください。 asyncawaitで作業を開始する前に、私は約束を読んでおくことをお勧めします。あなたは、おそらくそれはそうのように、約束を返す作るために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を使用してに見ることができます。

+1

これが答えになるはずです – felipekm

8

ES6

使用法: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) 
    } 
} 

コードです:FYI

// 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) 
     }) 
    }) 
関連する問題