2015-09-07 47 views
0

我试图在一个promise方法中设置一个variable并在另一个方法中访问它,但没有多少运气。在jQuery中传递承诺方法之间的变量AJAX

我有这样的代码:

$.getJSON('some/file/') 
.done(function(response) { 
    var foo = response; 
}) 
.always(function() { 
    // How can I access 'foo' here? 
}); 

所以我怎么能访问其他承诺方法foo变量?

+1

您需要在'done()'之外声明'foo' – Tushar

+0

这看起来非常糟糕。如果promise失败,'foo'不会被设置,所以你的'always'回调会抛出尝试使用它。你究竟想要做什么,你需要解决什么是真正的问题? – Bergi

回答

2

这是所有范围,如果你声明外done()函数的变量,那么你可以访问它在always()

var foo; 
$.getJSON('some/file/') 
.done(function(response) { 
    foo = response; 
}) 
.always(function() { 
    // How can I access 'foo' here? 
    console.log(foo); 
}); 

您可能会发现有趣的this也。还要记住,当ajax失败时总会执行。

+0

有道理,非常感谢。是的,知道“永远”的事情,那就是我想要的行为。 :) – Brett

+0

也许完成/失败的方法是更好的方法 – Robert

+0

不,对于我使用代码的情况,我不希望“always”块内的代码依赖于JSON文件检索的结果 - 它*总是*必须执行。 – Brett