如何將此例程封裝在Promise中,以便我只在解析所有數據時才解析?如何同步運行嵌套的異步方法?
var accounts = [];
getAccounts(userId, accs => {
accs.forEach(acc => {
getAccountTx(acc.id, tx => {
accounts.push({
'id': acc.id,
'tx': tx
});
});
})
});
編輯:任何問題,如果我這樣做?
function getAccountsAllAtOnce() {
var accounts = [];
var required = 0;
var done = 0;
getAccounts(userId, accs => {
required = accs.length;
accs.forEach(acc => {
getAccountTx(acc.id, tx => {
accounts.push({
'id': acc.id,
'tx': tx
});
done = done + 1;
});
})
});
while(done < required) {
// wait
}
return accounts;
}
你的異步動作在哪裏? –
看到所有承諾:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all用promisAll包裝你的每一個,並確保你在每次迭代中返回一個承諾你的「forEach」 –
你正在用一組對象填充一個名爲'accounts'的數組,每一個對象都有一個賬戶ID和一個事務,取決於消費這些數據的是什麼,但是它對'accounts'是一個'account'對象的數組,每個對象都包含一個'id'值和一個'tx'數組,我期望它被命名爲'accountTransactions'而不是'accounts'。 – stone