を解決することはありません:。彼らはすべての要求を実行するために)getFromApi(と呼ばれるこの方法を使用Promise.all([..])、私は次のようになり、個々の約束の数持って
var performancePerMonth = new Promise(function(resolve, reject) {
var path = some_path;
getFromApi(path);
});
を:
function getFromApi(path, callback) {
request({
method: 'GET',
url: base_uri + path,
headers: { 'TOKEN': 'MY_ACCESS_TOKEN' }
},
function (error, response, body) {
console.log('Status:', response.statusCode);
console.log('Headers:', JSON.stringify(response.headers));
console.log('Response:', body);
return body;
});
私は一緒にリクエストを実行し、すべての結果を含む配列を取得する必要があるため、私はPromise.allにすべての個々の約束を追加しました:
exports.perform = function(req, response) {
Promise.all([performancePerMonth, performancePerPlayer,..]).then(function(results) {
console.log('Then: ', results);
}).catch(function(err) {
console.log('ERROR Promise.all');
console.log('Catch: ', err);
})
};
問題は、getFromApi()メソッドのログからわかるようにリクエストが正常に実行されても、結果の配列は返されません。どうやらメソッドが実行されますが.then
内の関数になることはありませんし、この:
console.log('Then: ', results);
が(その下のキャッチ機能もない)に達することはありません。
プログラムがすべての要求が実行され、結果を返すまで実行されないかのように見えます。
あなたの機能ドン」のようなものが必要になる場合があり、
ので、エラーとして応答で返さ非2xxの状態を考慮していません約束を返すことも解決することもありません。 –
最初のコードブロックでは、決意が解決されないように 'resolve()'を呼び出すことはありません。終了時に実際に 'resolve()'を呼び出すためには、非同期関数に接続する必要があります。プロミスには、非同期操作が完了したときに知るべき魔法の力が含まれていないので、 'resolve()'または 'reject()'を呼び出すことによってそれらを伝える必要があります。 – jfriend00