現在、nodejsアプリで作業しています。その一部は、いくつかのapi呼び出しをテストしてから約束を返し、別の機能を実行します。nodejsで約束していない約束
ので - 私は、次の二つの機能を持つ約束の配列をループしています:個々の配列のためのすべてのAPIのためのすべての機能を超える
function testAllApis(apiList, counter = 0){
return new Promise(function(fulfill, reject){
console.log(counter);
if(counter == apiList.length){
console.log('test1');
fulfill();
console.log('test2');
}
else {
testSingleApi(apiList[counter]).then(() => {
testAllApis(apiList, counter + 1);
}).catch((e) => {
console.log(e);
reject(e);
testAllApis(apiList, counter + 1);
})
}
})
}
機能
function testSingleApi(thisApi){
return new Promise(function(fulfill, reject){
var apiUrl = '/api/' + thisApi.substr(7).slice(0, -3) + '/testapi/';
var options = {
hostname: serverHost,
port: serverPort,
path: apiUrl,
method: 'GET',
};
var req = http.request(options, (res) => {
console.log(res.statusCode);
fulfill(res.statusCode);
});
req.on('error', (e) => {
reject(e.message);
});
req.end();
});
}
端末でこれを呼び出すと、意図したとおりに機能します。コンソールは、私が作っているapi呼び出しの成功コード(200)を記録しますが、第3のものの後に、 'counter'が配列の長さと等しい場合、testAllApis関数のif条件に入り、 test1 '、次に' test2 'を実行してもまったく成立しません。
これについての洞察はありますか?私はまだ約束を新しくしていて、このオンラインの解決策を模索しようとしましたが、かなりの特定の質問だったので、代わりにここに投稿すると考えました。
return testAllApis(apiList、counter + 1); –
'return testAllApis(apiList、counter + 1);'を意味しませんか?さもなければ、それは完了するまで待つことはありませんか? –
ありがとう。私はこれを試して、悲しいことにそれはまだ私を助けていない。しかし、このベストプラクティスですか?私はこれを将来確実に行うつもりです。 –