gpt4 book ai didi

javascript - 累积 promise 值 "functionally"

转载 作者:行者123 更新时间:2023-11-29 21:07:17 31 4
gpt4 key购买 nike

假设我有这个:

function getAllPromises(key: string, val: any): Promise {

const subDeps = someHash[key];
const acc = {}; // accumulated value

return subDeps.reduce(function (p, k) {

return p.then(v => getAllPromises(k, v)).then(function (v) {
acc[k] = v;
return acc;
});

}, Promise.resolve(val));

}

有没有办法避免必须声明一个单独的变量:

const acc = {}; // accumulated value

并以某种方式从 promise 链返回它?

最终 acc 变量是从 promise 链中解析出来的,但想知道我是否可以以某种方式避免必须在链“外部”声明它。

编辑:类似这样的种子数据如下所示:

  {
'one': [function (v) {
return Promise.resolve('one');
}],

'two': ['one', function (v) {
return Promise.resolve('two');
}],

'three': ['one', 'two', function (v) {
return Promise.resolve('three');
}],

}

它只是一个声明性的依赖树。依赖可以并行解决;但在运行时可能会有效地阻止。例如,如果我有这样的功能:

function foo(one,two,three){


}

我想注入(inject)这 3 个依赖项。它们可以“并行”采购,但是 three 将被阻止,直到采购到 onetwo

subDeps 变量是什么?在 key="three"的情况下,subDeps['one','two']

最佳答案

在这里,我有点冒险,认为任何子 Node 的整个 subDeps 列表都可以并行加载。在更深入地看待这个问题时,我认为没有理由不是这种情况。事实上,我能看到的唯一潜在问题是,高于 但不低于该点的某个值可能是一个 promise ,因此,您甚至可以从这个特定的递归函数中取消 promise 。 ..

但是……

这是我认为合理的重构。让我知道是否遗漏了一些明显的需求。

const appendKeyValue = (dict, [key, value]) => {
dict[key] = value;
return dict;
};

const getKeyValuePair = hash => key =>
getRefactoredPromises(hash, hash[key])
.then(value => [key, value]);

const getRefactoredPromises = (someHash, subDeps) => {
return Promise.all(subDeps.map(getKeyValuePair(someHash)))
.then(pairs => pairs.reduce(appendKeyValue, {}));
};

事实上,如果我对这次重构的看法是正确的,那么您甚至不需要其中的 promise 。它就变成了:

const appendKeyValue = (dict, [key, value]) => {
dict[key] = value;
return dict;
};

const getKeyValuePair = hash => key =>
[key, getRefactoredHash(hash, hash[key])];

const getRefactoredHash = (someHash, subDeps) =>
subDeps.map(getKeyValuePair(someHash))
.reduce(appendKeyValue, {});

如果此调用的根级别恰好是一个 promise ,那么在这一点上应该无关紧要,除非我遗漏了什么(现在是早上 6:20,我还没有闭上眼睛)。

关于javascript - 累积 promise 值 "functionally",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43446823/

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