有人可以向我解释一下......拥有一个全局对象并使用下面的一些承诺。当我直接在函数中引用global时,引用是正确的。当我尝试传递参考时,它不是。
var globalObj = { ... }
function one() {
var deferred = Q.defer();
...
deferred.resolve();
...
return deferred.promise;
}
function two {
var deferred = Q.defer();
...
deferred.resolve();
...
return deferred.promise;
}
function doSomthing() {
var ref = globalObj; // this is ok
...
}
one().
.then(two)
.then(doSomething) // (1) this is ok it works
替代方案是......
var globalObj = { ... }
function one() {
var deferred = Q.defer();
...
deferred.resolve();
...
return deferred.promise;
}
function two {
var deferred = Q.defer();
...
deferred.resolve();
...
return deferred.promise;
}
function doSomthing(someRef) {
var sref = someRef; // someRef is []
...
}
one().
.then(two)
.then(doSomethhing(globalObj)) // (2) this is not ok does not work
请注意,列出了两个版本的代码我尝试过(1)没有引用,这很好,(2)传递引用,但事实并非如此。我不确定这是一个范围问题还是Q问题。有什么想法吗?
答案 0 :(得分:0)
此
one()
.then(two)
.then(doSomething(globalObj));
应该是
one()
.then(two)
.then(function () {
return doSomethhing(globalObj);
});
因为您不想立即致电doSomething()
,但这正是第一个变体所做的事情。