【发布时间】:2016-09-26 19:16:58
【问题描述】:
我已经承诺链,第一个链中的响应应该稍后在链中(在 4 和 6)中使用,我使用一些全局变量来处理它,但这不是正确的方法,有一个有更好的方式来实现这一目标?
这是问题的一些说明...
var step1 = (ms) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
log("This is step 1");
resolve(20);
}, ms);
})
}
var step2 = (ms) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
log("This is step 2");
resolve();
}, ms);
})
};
var step3 = (ms) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
log("This is step 3");
resolve();
}, ms);
})
};
var step4 = (ms) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
log("Step 4, run : " + ms );
resolve();
}, ms);
})
};
var globalVar = null;
//Promise chain
step1(500)
.then((res) => {
//Here I keep the response in global variable to use later on
globalVar = res;
log(res);
return step2(300);
}).then(() => {
return step3(200);
}).then(() =>{
//Here I need to use the res from the first promise
var lclvar = globalVar +200 ;
return step4(lclvar);
}).catch((err) => {
log(err);
});
我发现了这个,但在这种情况下这没有帮助(至少无法处理它)
How do I access previous promise results in a .then() chain?
【问题讨论】:
-
您找到的问题正是您的案例所需要的。请告诉我您对答案的不理解之处,或者您选择并尝试应用的答案之一中的哪个解决方案。请edit您的问题向我们展示您的尝试(没有奏效)!否则我必须将其作为副本关闭。
-
@Bergi -谢谢,我尝试将其拆分但没有成功...您的意思是像 phil answer 一样使用它吗?
-
请发布该尝试的代码,以便我找出问题所在。如果您已经了解应该如何进行划分(“打破链条”),我们将能够解决它。
-
是的,这里的两个答案都很好,他们的方法在副本中被描述为“Nesting (and) closures”和“Explicit pass-through”
-
@Bergi - 帖子中的代码与我在产品中的代码完全相同(只是我正在调用我们公司的内部服务,这将使所有帖子都难以理解......),如果我们能够解决它,这会很棒,然后我可以在产品中使用它。
标签: javascript node.js promise bluebird q