2014-09-19 72 views
0

我想我终于得到了我的头在承诺,但它似乎我偏离了一点。jQuery的承诺和延期,混乱

谁能把我从我的痛苦,并解释我做错了什么在这里:

t010 = { myGet: function(url) { var result = new $.Deferred(); result.resolve(ajaxRequest(url)); } }

,然后由我的主要方法,所谓:

$.when(t010.myGet(seatId), t010.myGet(roomId)).then(function(d1, d2) { console.log(d1); }

我只是控制台日志未定义每次。

我想我想要达到的是相当明显的,我想打电话给myGet两次,当两个都完成后做一些结果。

谢谢大家!

回答

2

你必须返回承诺使用$.when

t010 = { 
    myGet: function(url) { 
    var result = new $.Deferred(); 
    result.resolve(ajaxRequest(url)); 

    return resolve.promise(); 
    } 
} 

但马上解决的承诺,回传ajaxRequest功能,这可能是undefined当时的结果呢?
但是,在ajaxRequest已经看起来像它返回一个承诺,你可以直接返回它

t010 = { 
    myGet: function(url) { 
    return ajaxRequest(url)); 
    } 
} 

假设你的Ajax功能看起来像

function ajaxRequest(url) { 

    return $.ajax({ 
     url : url 
    }); 

} 
+0

我明白是啊,我想我的问题就出在ajaxRequest函数我不得不使用,因为它返回'返回$ .ajax(默认).promise()。然后(函数(数据){尝试{返回JSON.parse(数据);} catch(e){返回数据; }'因此为什么我什么也没有得到。 – rogy 2014-09-19 22:34:14

+0

你不能像这样的函数返回数据,因为它是异步的,你真正需要的就是'返回n $ .ajax(defaults);',然后执行'then()'(可能是'done()')函数,你调用它,'ajaxRequest(url).done(function(data){ });'等等,你可以在'$ .when'等中包含多个这样的内容。 – adeneo 2014-09-19 22:41:59

+0

我无法控制那个烦人的返回函数(至少不是现在),所以我不得不使用它作为是的,我认为这是不会不改变ajax功能然后呢? – rogy 2014-09-19 22:43:56