Javascript 使用链式Q承诺异步加载局部变量

Javascript 使用链式Q承诺异步加载局部变量,javascript,promise,q,Javascript,Promise,Q,我有一个疑问。。如果我在promise的.then()之前定义变量,那么在.then()中可以找到它们,对吗?对于回调,情况并非如此,但应该使用q承诺 为了确保这一点,我询问下面的代码是否正确,即使是在多个请求的情况下 因此,第二个的arg2。then()始终是正确的,它不是上次调用myapp()的arg2 是的,那会有用的。无论函数被调用多少次,都会在函数中创建新的变量。由于闭包属性,传递给然后处理程序的函数仍然能够访问arg2和arg3 但是,正确的方法是,通过返回值来解析然后处理程序返回的

我有一个疑问。。如果我在promise的
.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) {});
}