q 从 .then 函数分配给更高级别的范围变量是否有任何陷阱

q Are there any pitfalls in assigning to higher level scope variables from .then functions

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

var q = require('q');

function example() {

    var result1;

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

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

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

您可以看到此 post 以多种不同方式管理跨众多相关承诺的数据,因为分配给更高范围的变量并不是唯一可能的方式。

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

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