q从.then函数中分配更高级别的范围变量是否存在任何缺陷

时间:2016-03-09 07:53:45

标签: javascript node.js closures q

在使用q库https://github.com/kriskowal/q的nodejs或javascript代码中,将.then()调用的一个函数的结果分配给函数作用域变量,并在下一个.then()调用中使用它导致错误。

var q = require('q');

function example() {

    var result1;

    return q()
    .then(function() {
        result1 = 1;
        return 2;
    })
    .then(function(two) {
       return  result1 + two;
    });
}

2 个答案:

答案 0 :(得分:0)

将更高级别的范围变量指定为从链式承诺中累积结果的方法没有任何问题。这是一种方法。您的示例实际上并未显示任何异步操作,因此并不完全清楚您要完成的操作。

当分配到更高的范围时,您必须确保在Promise完成填充之前没有其他代码尝试使用该数据。

您可以通过多种不同的方式查看此帖子Collecting Data From Multiple Promises,以便在众多相关承诺中管理数据,因为分配更高范围的变量并不是唯一可行的方法。

答案 1 :(得分:0)

不,它不会出错...但是你的then()没有解决Promise,所以这可能会有问题。

我不确定Q(我使用Bluebird),但如果您使用等待spreadresult1值的result2运算符,则会更好解决。