【问题标题】:Multiple API calls simultaneously in marionetteJSmarionetteJS 中同时调用多个 API
【发布时间】:2014-07-29 12:40:36
【问题描述】:

我使用 forcast api 来获取天气数据。在木偶中,我使用模型将 API rulRoot 定义为

var weatherApi = Backbone.Model.extend({
        defaults:{
                lat:"",
                lng:"",
                timeStamp:"",
                units:"",
                response:""
        },
        urlRoot: function(){
                return '/api/web/forecast?lat='+ this.get("lat") + '&long=' + this.get("lng") +'&time=' + this.get("timeStamp") + '&units='+this.get("units");
        }
});

然后我实例化为

weatherApiGddObj = new weatherApiInstance();

我使用这个对象来获取 api 调用响应。现在我想要的是从今天到接下来的 30 天同时进行多个 api 调用,所以如果我一个接一个地做,那么得到所有响应需要很多时间。我如何用木偶做到这一点?

【问题讨论】:

  • 木偶不扩展 BB 模型的功能。它升级 View 并为您添加顶级架构块。
  • 这不是木偶问题。它应该被标记为 Backbone。另外,您是否不知道 javascript XMLHTTPRequests 对象(又名 AJAX 调用)是如何工作的?它是异步的,因此您无需等待一个完成就可以发送另一个。只需一个接一个地发送它们,然后异步处理响应。如果您需要全部响应,请使用Async

标签: api marionette


【解决方案1】:

如果有一种方法可以让您在一个请求中获取日期范围内的数据,那就太好了。但根据你的情况,我会这样做:

var date, startDate = someTimestamp, day = 86400, 
    endDate = startDate + day * 30, promises=[];

for(date = startDate; date < endDate; date += day){
    weatherApiGddObj.set('timestamp', date);
    promises.push(weatherApiGddObj.fetch());
}

$.when.apply($,promises).done(function(){
    var data = Array.slice.call(arguments);
    console.log(data);
});

我建议你阅读Deferred Object

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-08
    • 2017-12-24
    • 2021-11-01
    • 1970-01-01
    • 2022-01-14
    • 2014-04-07
    • 2018-05-21
    • 2021-02-02
    相关资源
    最近更新 更多