私はAPIのラッパーを使用していますが、エンドポイントはクエリの際にユーザーIDだけを受け取りますが、ユーザー名で検索できる単一のエンドポイントがあります(ラッパー、searchByUsername、以下で使用します)。外部ライブラリのないノードで複数の非同期http要求を処理する適切な方法は何ですか?
var convertToID = function (username, callback) {
searchByUsername(username, function (error, response, body) {
if (body.users[0]){
callback(body.users[0].username)
}
})
};
そして、ここでは、私はそれを使用している方法は次のとおりです:
this.relationship = function (user, query, callback) {
if (isNaN(user)) {
convertToID(user, function (ID) {
get('/users/' + ID + '/relationships/?query=' + query, callback);
})
} else {
get('/users/' + user + '/relationships/?query=' + query, callback);
}
}
これは正常に動作しますが、それは明らかに次善のですが、すべての要求火災の前にそれらを変換するために我々のユーザーの柔軟性を与えるためにヘルパー関数これを私のラッパーのすべてにドロップしてください。 Rubyのバックグラウンドから来て、私はこれを一本の線に集約することができました。しかし、JSの非同期の性質は、私の脳をひねるようなものです。私が本当に欲しいのに匹敵するものです:JSの落とし穴非同期(async)が、私は何かが欠けている必要があります(はい、私はそれらの多くがあります知っている)私は他の答えを探ってきました
var user = isNaN(user) ? convertUsernameToID(user) : user;
get('/users/' + user + '/relationships/?query='+query, callback);
再。過去の大規模なプロジェクトでは、私は非同期パッケージを使用しましたが、これには過剰な気分があり、実際にはこれを嫌っていました。あなたが約束を使用している場合
約束を見ましたか? – Bergi
あなたの 'convertToID'関数はエラーをうまく処理していないようです。あなたは本当に約束を見なければなりません。 – Bergi
@Bergiええ、私はブルーバードとES6の約束に少し曝露しました。私は実際に似たような問題にぶつかることを覚えています。それは入れ子関数から値を返すことができないということでした。だから私はまだ上記の1行の解決策のようなものを達成することができませんでした - 私はそれらを誤解していない限り。私の頭はRubyの土地にあまりにも張り付いていますか? – commitaphobe