gpt4 book ai didi

javascript - 当我推送 promise 数组时, promise 是否已解决?

转载 作者:太空宇宙 更新时间:2023-11-04 03:12:37 24 4
gpt4 key购买 nike

我想将 Promise 推送到数组。然后我想使用 Promise.all() 来解决它。但我不确定,当我推送到数组时,promise 是否有效?

例如:


const productIds= [1,2,3,4,5,6] // example
const promises = [];
productIds.map(productId => promises.push(ProductDataAccess.updateProductStock(store,productId,incQuery)));

如果我不使用Promise.all(),会发生db进程吗?或者当我进行 Promise.all() 时是否发生 db 进程。


const productIds= [1,2,3,4,5,6] // example
const promises = [];
productIds.map(productId => promises.push(ProductDataAccess.updateProductStock(store,productId,incQuery)));
Pormise.all(promises);

最佳答案

If I don't Promise.all(), will db process occur?

这要看情况。一般答案是。但请注意,这并不总是正确的。

通常,返回 Promise 的函数会在您调用它们时安排异步进程。因此,无论您是否等待,异步过程都会发生

但是,有些函数并不真正返回 promise 。他们返回一个类似 promise 的对象。有时(并非总是)它们不会启动异步进程,除非您调用 .then()。使用流畅/可链接函数的数据库库可以做到这一点。这是数据库中常见的设计模式:

// knex example:

let x = knex('my_table').select(['id','some_info']); // will not trigger db query
console.log(x); // knex object - not a Promise!

x = x.where('id', 0); // still no db query
console.log(x); // still not a Promise!

x = x.then(result => console.log(result)); // TRIGGERS DB QUERY!
console.log(x); // Yay! A Promise!

许多数据库库这样做是为了实现对用户透明的流畅/链接风格的 API。它们通过调用 .then() 函数来检测查询构造的结束。

现在,我不知道您正在使用什么数据库库,但是如果您受此影响,那么要触发数据库查询过程,您将需要直接或间接调用then:

  • 自己调用.then()
  • 将对象传递给 Promise.all(),后者在内部调用 .then()
  • await 在内部调用 .then()async 函数中的结果

关于javascript - 当我推送 promise 数组时, promise 是否已解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60588150/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com