2016-07-18 19 views
12

Ben nodejs için yeniyim. Yanıtı eski 1'de görmüyorum ama ben 2'de görüyorum. Neden? Babamın yanında başka yerlerde de beklerim.Düğüm istek modülü için neden beklemiyorsunuz?

Ör 1

let res = await request(url) 
console.log(res); 
console.log(res.body); 

Ör 2

request(url, function (error, res, body) { 
if (!error && response.statusCode == 200) { 
console.log(body) 
} 
}); 

bekliyoruz, başka yerlerde çalışıyor ben ES6 ve ES7 özellikler için Babel ve gerekli modülleri kullanıyorum. Örneğin, beklemek squelize çağrısı çalışır, ben doğrulanır. Ancak istek için çalışmaz. Niye ya?

+0

Bilginize, 'zaman uyumsuz/await' ES7 bir parçası değildir. Bu hala sadece bir teklif. –

+0

Cevabımıma bakın [here] (http://stackoverflow.com/a/38252603/2410379). Ayrıca, [bu] (https://tc39.github.io/ecmascript-asyncawait/#async-function-definitions) da yararlıdır. –

cevap

27

Sadece bir Promise döndüren bir şey üzerinde await yapmalısınız. async ve await ile çalışmaya başlamadan önce kesinlikle Promises üzerinde okuma tavsiye ederim. Muhtemelen o kadar gibi bir söz dönmek yapmak request etrafında kendi sarıcı işlevini oluşturarak çalışmaya Bu örneği elde edebilirsiniz:

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: Alternatif olarak, bunları normal istek modülünün request-promise kullanarak içine bakabilirsiniz.

+1

bu cevap olmalı – felipekm

8

ES6

Kullanımı:request olduğunda 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) 
    } 
} 

Kodu:

// 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) 
     }) 
    }) 
İlgili konular