gpt4 book ai didi

javascript - 这是为数组生成 promise 链的好方法吗?

转载 作者:行者123 更新时间:2023-11-28 00:02:21 25 4
gpt4 key购买 nike

我有一个项目数组想要插入到 SQL 服务器中。我为此使用了 Promise,为了按顺序执行每个插入,我编写了以下方法:

var ForeachPromise = function (array, func) {
var promise = func(array[0]);

for (var i=1; i < array.length; i++) {
promise = promise.then(function() { return func(array[i]) });
}

return promise;
}

这个想法是,当调用 func 时,它将返回一个 promise ,然后该 promise 将链接到前一个 promise 。

...
return ForeachPromise(type.subprocessen, function(subproces) {
return newSubproces(subproces, typeId, dienstId, createData, s + 1);
});

我还没有实际测试过它,但我认为这样的东西会起作用。然而我的问题是我是否正确使用了 promise ? promise 是伟大的,但很容易被误解,我只是想确保我没有犯任何根本性的错误。

最佳答案

是的,这种方法很好,并且与 Promise 配合得很好。两个小问题:

  • 您应该注意空数组的情况。使用 Promise.resolve() 开始您的链(通过 undefined 履行 promise ),并从索引 0 开始循环。
  • 由于 then 回调是异步的,因此您的 i 变量具有错误的值 - 经典的 closure in a loop谬误。

使用.reduce method确实有助于解决这两个问题:

function foreachPromise(array, func) {
return array.reduce(function(promise, elem, i) {
return promise.then(function() { return func(elem) });
}, Promise.resolve());
}

关于javascript - 这是为数组生成 promise 链的好方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31680274/

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