Следующий код на самом деле не делает то, что я хочу.Ждите обещаний из цикла for
function doIt() {
return new Promise (function (resolve, reject) {
var promises = [];
db.transaction(function(tx1){
tx1.executeSql(function(tx2, rs) {
for (var i = i; i < N; i++) {
promises.push(db.transaction(function(tx3){
...
}));
}
});
});
Promise.all(promises).then(resolve);
});
}
Сейчас он не работает, потому что Promise.all() запускается на выполнение, прежде чем все обещания в массиве, по крайней мере, я думаю, что это правильно.
Есть ли элегантный способ гарантировать, что все эти обещания закончены, прежде чем они закончится?
'перед всеми обещаниями в массиве. нет. вызов 'push' и вызов' all' являются последовательными, поскольку они работают в одной и той же функции. мне кажется, что это должно сработать. – njzk2
db.transaction не является последовательным. Я сделал оповещения после цикла и после завершения транзакций, и предупреждение после того, как цикл появился первым. – Odin
, и этого не должно быть, иначе не было бы смысла использовать обещание. Но это не проблема, так как вы держите ссылку на обещание. Запишите размер массива, прежде чем называть 'Promise.all', я уверен, что все обещания есть. – njzk2