javascript MVC 结构,将模型映射到 rest api

javascript MVC structure, map model to rest api

我正在尝试在我的 Web 应用程序中制作一个模型(MVC 中的 M),以理解这个概念。我正在努力解决以下代码中出现的异步问题:

function FruitModel(api) {
    this._api = api;
}

FruitModel.prototype = {
    getFruit: function(fruit_id) {
        $.getJSON(this._api + fruit_id, function(data){
            return data;
        });
    }
}

$(function(){
    var fruits = new FruitModel("/fruit/");
    console.log(fruits.getFruit(123))
});

我知道这是错误的,因为 console.log 会在 getJSON 完成之前发生,因为这是异步的。我应该如何设计这个来防止这个问题?

我想获取前端 MVC 的实际数据是从与我相同的 RESTapi 模型中访问它。有没有更好的解决方案,而不是像我这样在模型中这样做?

您可以向函数发送回调并在完成异步代码后执行它:

FruitModel.prototype = {
    getFruit: function(fruit_id,callback) {
        $.getJSON(this._api + fruit_id, function(data){
            callback(data);
        });
    }
}

$(function(){
    var fruits = new FruitModel("/fruit/");
        fruits.getFruit(123, function(data){
           console.log(data);
         });

});

为了避免这个问题,你可以这样做(因为 from jQuery 1.5 .getJSON 实现了 Promise 接口)

function FruitModel(api) {
    this._api = api;
}

FruitModel.prototype = {
    getFruit: function(fruit_id) {
       return $.getJSON(this._api + fruit_id);
    }
}

//Call

fruits.getFruit(123).done(function(data){
  console.log(data);
})