まず、あなたは、そのシンプルさのためにHTTPリクエストのための最も人気のある選択肢である、requestを見てみたいと思うでしょう。
第2に、要求の単純さと約束のコンセプトを組み合わせて、複数の要求を連続して行い、コードをフラットに保つことができます。私たちが望むようあなたが見ることができるようにrequest-promise
var rp = require('request-promise')
var url1 = {}
var url2 = {}
var url3 = {}
rp(url1)
.then(response => {
// add stuff from url1 response to url2
return rp(url2)
})
.then(response => {
// add stuff from url2 response to url3
return rp(url3)
})
.then(response => {
// do stuff after all requests
// If something went wrong
// throw new Error('messed up')
})
.catch(err => console.log) // Don't forget to catch errors
使用
は、我々はできるだけ多くのリクエストを追加することができ、そしてコードがフラットでシンプルなままになります。ボーナスとして、エラー処理も追加できました。伝統的なコールバックを使用すると、すべてのコールバックにエラー処理を追加する必要がありますが、ここではプロミスチェーンの最後で一度だけ行う必要があります。
UPDATE(9月16日):約束は中途半端そこに私たちを取る一方で、更なる経験は同期、非同期コード間の混合がたくさんある時にのみ約束厄介ことを私に確信しており、特に、例えば場合(フローを制御します-else)。これを解決するための標準的な方法はasync/awaitですが、まだ開発中であり、蒸散が必要です。したがって、generatorsは次善策です。今書いている時点でのノードの最新バージョン(7.2.1)がサポートしていることを非同期/のawait --harmony
旗の後ろに、あなたができる:coは
var co = require('co')
var rp = require('request-promise')
var url1 = {}
var url2 = {}
var url3 = {}
co(function*() {
var response
response = yield rp(url1)
// add stuff from url1 response to url2
response = yield rp(url2)
// add stuff from url2 response to url3
response = yield rp(url3)
// do stuff after all requests
// If something went wrong
// throw new Error('messed up')
})
.catch(err => console.log) // Don't forget to catch errors
UPDATE(12/16)使用
これは:
const rp = require('request-promise')
const url1 = {}
const url2 = {}
const url3 = {}
async function doRequests() {
let response
response = await rp(url1)
// add stuff from url1 response to url2
response = await rp(url2)
// add stuff from url2 response to url3
response = await rp(url3)
// do stuff after all requests
// If something went wrong
// throw new Error('messed up')
}
doRequests()
.catch(err => console.log) // Don't forget to catch errors
大まかに私が入力していた答え。 'request'とPromisesの両方を使うことは素晴らしい提案です。 –
ありがとうございますが、表現文が代入や呼び出しではありません。要求の約束以外に追加する必要のあるライブラリがありますか? .then(応答=> { –
あなたは他のライブラリは必要ありません。ES5で書いてみてください。あなたのノードのバージョンは太い矢印の表記法をサポートしていないかもしれません。.then(function(response){...}) –