GetPurchaseDataを呼び出すGetAllData()という関数があります。この関数は、すべてのデータがロードされるまで再帰的に自身を呼び出します。エクスプレスリクエストでNodeJS async/await + recursion
async function GetAllData(){
console.log("starting loading purchase data");
await GetPurchaseData();
console.log("purchase data loaded")
}
async function GetPurchaseData(){
return new Promise(async function (resolve,reject){
var Headers = {
....
}
await request({url: xxx, headers: Headers },async function(error, response, body) {
var tmp = JSON.parse(body)
_.forEach(tmp.Purchases, p => purchaseData.push(p));
if (response.headers.pagination){
return await GetPurchasePaginatedData()
}
else{
console.log("done loading....")
return resolve("done")
}
});
})
}
内のノードJSは、次のような出力出力します
starting loading purchase data
done loading....
をそれは
購入データは、それがほとんどらしい
をロード印刷するGetAllDataまで戻ってくることはありませんその機能にこだわっているように、私の意見は何とか "復帰のラインsolve( "done") "は最初の呼び出しまで戻ってこないので、実際にPromiseを完了としてマークします。
ことの一つは、あなたが明示的に '非同期function'から' Promise'を返す必要がないということです、 'async'は、あなたの関数がどんな' Promise'を返さないことを決定します。 – zero298
また、 'request'は' Promise'やコールバックを受け取りますか?前回私が使ったときには、標準のnode.js形式でコールバックが必要でした。その場合、 '要求'をラップするか、 '約束'で動作するライブラリを見つける必要があります。 – zero298
私は折り返し新しいPromise(...リクエスト()...)をしてリクエストしていますか? – Gio