Javascript 使用链式Q承诺异步加载局部变量
我有一个疑问。。如果我在promise的Javascript 使用链式Q承诺异步加载局部变量,javascript,promise,q,Javascript,Promise,Q,我有一个疑问。。如果我在promise的.then()之前定义变量,那么在.then()中可以找到它们,对吗?对于回调,情况并非如此,但应该使用q承诺 为了确保这一点,我询问下面的代码是否正确,即使是在多个请求的情况下 因此,第二个的arg2。then()始终是正确的,它不是上次调用myapp()的arg2 是的,那会有用的。无论函数被调用多少次,都会在函数中创建新的变量。由于闭包属性,传递给然后处理程序的函数仍然能够访问arg2和arg3 但是,正确的方法是,通过返回值来解析然后处理程序返回的
.then()
之前定义变量,那么在.then()
中可以找到它们,对吗?对于回调,情况并非如此,但应该使用q
承诺
为了确保这一点,我询问下面的代码是否正确,即使是在多个请求的情况下
因此,第二个的arg2
。then()
始终是正确的,它不是上次调用myapp()的arg2
是的,那会有用的。无论函数被调用多少次,都会在函数中创建新的变量。由于闭包属性,传递给
然后
处理程序的函数仍然能够访问arg2
和arg3
但是,正确的方法是,通过返回值来解析然后处理程序返回的承诺,如下所示
function myapp() {
var arg1 = 1;
return call_promise(arg1)
.then(function(data) {
return data;
}).then(function(arg2) {
console.log(call_function(arg2));
}).catch(function(err) {});
}
它的可能副本同样适用于非承诺回调。@Joe-mmh可能不会,但谢谢你,这是一个有趣的讲座。阅读一些用这种简单方式解释的理论总是很好的,只是说::-):P是的,我也不喜欢,正如@thefourtheye建议的那样,使用return更好。感谢与解释的链接…以及。然后(函数(数据){return data;})
可以完全省略。@Bergi是这样,但这就是答案的要点:D从然后
处理程序返回值
function myapp() {
var arg1 = 1;
return call_promise(arg1)
.then(function(data) {
return data;
}).then(function(arg2) {
console.log(call_function(arg2));
}).catch(function(err) {});
}