【发布时间】:2019-11-27 00:16:18
【问题描述】:
对于 id 列表,我想做一些 GET。这些都包含在一个承诺中。
let ids = [1, 2, 3]
let promises = [];
for (id in ids) {
promises.push(ApiService.get(url + id))
}
return promises
现在在结果上调用 promises.all 时,结果按创建它们的顺序排列 (1, 2, 3)。由于这发生在某种 API 控制器中,我宁愿不必将“ids”与承诺一起返回。而是返回一些:
{1: PromiseofId1, 2: PromiseofId2, 3:PromiseofId3}
也许我的思维方式有缺陷,我愿意接受建议。
【问题讨论】:
-
当我看到一个数组和
for ... in一起使用时,我起鸡皮疙瘩。 -
@ASDFGerte 为什么?
-
Promise.all()使用数组。使用数组index.. 最佳做法是构建 API,以便无论返回什么,都可以识别它是什么,因此顺序并不重要,知道客户端上的内容是什么。 -
@Gibor 他的例子中的数组可能是
["lalala", null, undefined],它不会改变任何事情。此外,如果有人想到将可枚举属性添加到Array.prototype,事情就会变得非常糟糕。 -
@Gibor 除了在原型上包含枚举值外,
for ... in的规范也不需要按顺序循环。这取决于浏览器的编码方式。大多数浏览器都会这样做,但这不能保证。因此,在数组的情况下,不能 100% 确定数组元素 [0] 将首先被处理,这可能导致难以找到错误。正常的for ( let i = ....循环和array.forEach()没有这个问题。有关详细信息,请参阅 MDN 文档。
标签: javascript promise