【发布时间】:2014-10-15 09:59:19
【问题描述】:
假设您必须链接返回承诺的函数,其中每个函数都需要 一些(不一定是最后一个)其他承诺返回的值。
这个模式有名字吗,用 promises 干净可行吗?
例如:
return getA().then(function (a) {
getB(a).then(function (b) {
getC(a, b).then (function (c) {
return {
a : a,
b : b,
c : c
}
});
});
});
你不能“天真”地把它弄平:
getA().then(function (a) {
return getB(a);
}).then(function (b) {
// Obviously won't work since a is not there any more
return getC(a, b);
}).then(function (c) {
// Same game, you can't access a or b
});
我能看到的唯一替代方法是 getA、getB 和 getC 实际上返回一个 Promise,该 Promise 由一个包含 a、b、c 的对象解析。 (所以每个函数都会构建它是最终结果的一部分。)
getA().then (function (result) {
return getB(result.a);
}).then(function (result) {
return getC(result.a, result.b);
}).then(function (result) {
// Last function is useless, just here to illustrate.
return result;
});
在我的第一个示例中,有没有办法将代码展平?
【问题讨论】:
-
You can't "naively" flatten this :是的,你可以。 :) 使用 .then 修改 getB 和 getC 的结果 -
@KevinB 不确定我明白你的想法,你能补充一个例子吗?
-
嗯,我一直在尝试客观地看待这一点,但所有改进代码的建议主要都是基于意见的。但是,我可以说,您的第一个示例不是承诺链的正确方法。
标签: javascript promise