【发布时间】:2021-02-06 02:55:12
【问题描述】:
我有一个循环来比较 2 个数据库。在循环结束时,我正在保存进行了多少更改。 我需要确保在一切完成后运行“LogResults”。
这样的东西可以工作,但由于“获取”上的“等待”而速度很慢。
for( let i = 0; i < json.data.length; i++ )
{
var newEntry = new PopulateNewEntry( ... );
entryArray.push( newEntry );
await wixData.get( "MyDatabase", newEntry._id ) // <--- Slow
.then( async results => {
if( results === null )
{
//...Async process to write new entry to database.
}
else if( results are different )
{
//...Async process to modify entry in database.
}
})
}
LogResults();
我在这里看到了使用 promise 数组并等待所有人完成的方法。但我想我不确定如何在履行承诺的同时使用它。我发现的所有示例都没有在正在等待的函数上使用“.then”。
如下所示,但这不起作用。似乎永远不会完成“等待”。
var pending = [];
for( let i = 0; i < json.data.length; i++ )
{
var newEntry = new PopulateNewEntry( ... );
entryArray.push( newEntry );
const promise = wixData.get( "MyDatabase", newEntry._id )
.then( async results => {
if( results === null )
{
//...Async process to write new entry to database.
}
else if( results are different )
{
//...Async process to modify entry in database.
}
})
pending.push( promise );
}
const array = await Promise.all( pending );
LogResults();
我在这里做错了什么?
【问题讨论】:
-
看看link
-
你不是将一个待处理的承诺推送到一个数组,而是一个已经实现的承诺,因为你已经将
.then()链接到它。