局部变量与链式Q承诺异步加载

时间:2016-03-16 10:57:39

标签: javascript promise q

我有疑问..如果我在承诺的.then()之前定义变量,我可以在q内找到它们,我是对的吗?回调不是这样,但它应该使用arg2承诺。

为了确保这一点,我问下面的代码是否正确,即使在多个请求的情况下也是如此。

因此,第二个.then()的{​​{1}}始终是正确的,并且它不是最后一次调用myapp()的arg2

function myapp()
{
    var arg1=1;
    var arg2=undefined;  // loaded async
    var arg3=undefined;  // loaded async

    call_promise(arg1)
          .then(function(data)
               {
                 arg2 = data;
               })
         .then(function()
              {
               arg3 = call_function(arg2);
               console.log(arg3);
              })
         .catch(function(err){});
}

1 个答案:

答案 0 :(得分:3)

是的,那会有效。无论调用函数多少次,都会在函数中创建新的变量。由于closure属性,传递给then处理程序的函数仍然可以访问arg2arg3

但是,正确的方法是通过返回值来解决then处理程序返回的promise,就像这样

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) {});
}