我有一个React / Flux应用程序我试图返回我的“promiseSuccessData”但它必须在ajax承诺之外完成。在getChallengeData()。
中getChallengeData : function() {
$.ajax({
type: 'GET',
url: baseUrl + '1.0/challenge/result/' + challengeId,
crossDomain: true,
xhrFields : {
withCredentials : true
},
})
.done(function(promiseSuccessData) {
_challenges = promiseSuccessData;
})
.fail(function(jqXhr) {
console.log(jqXhr)
console.log('failed to register');
});
//This is where I want to "return _challenges" but _challenges isn't available here
},
答案 0 :(得分:1)
您应该返回promise,并将done处理程序添加到您需要使用值的位置之外(我将假设UIBarButtonItem
是一个名为getChallengeData
的对象的方法,以便于示例):
myObj
然后,当你使用它时:
getChallengeData : function() {
return $.ajax({
type: 'GET',
url: baseUrl + '1.0/challenge/result/' + challengeId,
crossDomain: true,
xhrFields : {
withCredentials : true
},
}).fail(function(jqXhr) {
console.log(jqXhr)
console.log('failed to register');
});
},
答案 1 :(得分:0)
编辑:看到OP想要返回_challenges
的值,而不仅仅是以某种方式使用它。
在_challenges
函数运行之前,您无法使用done
。使用异步Promises时,你会想要返回实际的Promise(jQuery Deferred?)并让调用者附加他自己的处理程序。
function foo() {
obj.getChallengeData()
.done(function(challenges) {
// Work with challenges here
});
}
var obj = {
getChallengeData : function() {
return $.ajax({
type: 'GET',
url: baseUrl + '1.0/challenge/result/' + challengeId,
crossDomain: true,
xhrFields : {
withCredentials : true
},
})
.fail(function(jqXhr) {
console.log(jqXhr)
console.log('failed to register');
});
},
// Other props
}