2

我有一个问题,我不确定如何在我的主干应用程序中巧妙地解决。我有一个需要获取 2 或 3 个不同模型的视图。

我有一个个人资料视图,向客户显示他的任务和个人资料信息,但是当教练访问它时,我还想加载教练模型以使教练能够切换内容。

Promise 如何处理 if else 语句?我可以按照我编写的方式编写代码吗?它是否可以这样工作?

var tasks = new App.Task.Collections.Tasks();
var coaches = new App.Coach.Collections.Coaches();
var user = new App.User.Models.User();

if(App.User.Models.currentUser.isCoach()){

    var userPromise = user.fetch();
    var coachPromise = coaches.fetch();
    var tasksPromise = tasks.fetch({
        data: {
            userId: userdId
        }
    });

    $.when(userPromise, coachPromise, tasksPromise).then(function(){

        App.Layout.page.show(layout);
    });

}else{

    var userPromise = user.fetch();
    var tasksPromise = tasks.fetch({
        data: {
                userId: userdId
        }
    });


    $.when(userPromise, tasksPromise).then(function(){

        App.Layout.page.show(layout);
    });
}

承诺如何与 if else 语句一起使用?

4

2 回答 2

1

您的代码看起来正确。代码中的 if/else 语句根本不会影响所有的承诺,因为所有的.fetch()调用都在它们对应的块中。请记住将所有这些集合传递给您正在显示的布局。

于 2013-08-20T16:06:41.513 回答
0

你可以在一个数组上收集你的承诺,然后将它们传递给 $.when

var promises = [];

promises.push( modelA.fetch() ); // default
if(value){ 
   promises.push( modelB.fetch() ); // conditionally added
}

$.when.apply($, promises).then(function(){
   // do your stuff
});
于 2014-04-10T15:46:25.043 回答