如何进行两次主干fetch调用并将其组合起来

时间:2016-08-11 10:47:57

标签: javascript asynchronous backbone.js

我需要在同一个集合上调用两个后端调用,并将结果合并到单个集合对象。我还需要触发同步'方法只有两个fetch方法都成功。

以下是代码段

myCollection.fetch({ headers: {myheader: 'test1'}, data: {status: 'test1'}, reset: true});
myCollection.fetch({ headers: {myheader: 'test2'}, data: {status: 'test2'}, reset: true, add: true});

myCollection.once('sync error', function () {
    $('#js-my-grid').html(view.render().el);

}); 

我需要在完成两次提取后才渲染视图。这怎么可能 ?

提前致谢。

2 个答案:

答案 0 :(得分:1)

如果只有在其中一个失败后立即呈现视图,您应该可以使用$.when

$.when(myCollection.fetch({ headers: {myheader: 'test1'}, data: {status: 'test1'}, reset: true}),
       myCollection.fetch({ headers: {myheader: 'test2'}, data: {status: 'test2'}, reset: true, add: true}))
 .always(function() {
     $('#js-my-grid').html(view.render().el);
 });

如果使用.done,您可以分配一个回调,当两个成功时都会执行,如果使用.fail,您可以定义一个回调,如果其中一个请求失败,将执行回调。我使用.always,因为看起来你想要呈现视图请求是否成功。

答案 1 :(得分:0)

var count = 0;

myCollection.fetch({..., success: _internal});
myCollection.fetch({..., success: _internal});

function _internal() {
    count ++;
    if (count < 2) return;
    //2 calls are finished. do whatever you want here.
}