JavaScript对象文字嵌套对象状态

时间:2016-11-01 15:36:23

标签: javascript

我尝试调用" ViewModel.healthData.get"两次。在这两种情况下,该方法都从Internet检索数据。我如何制作"数据"字段保留其数据?

someString in ($param)  | someString not in ($param) 
...                     |
"Apple", "Banana"       |
                        | "Lemon", "Orange"

1 个答案:

答案 0 :(得分:2)

我想你可能想看看Promises,它会大大简化你的工作流程。由于您等待要填充数据,您的呼叫可能会发生得太快或太晚,但承诺并非如此。只需在完成后调用resolve(或在失败时调用reject)并将其传递给您。从那时起,任何使用.then调用的函数(以及自启动请求后调用该函数的任何函数)都将立即使用第一个参数中的数据进行调用。

function MyObject() {
    this.ViewModel.healthData = new Promise(function( resolve, reject ){
        $.ajax({
            url: "/api/Health",
            type: 'GET',
            async: true,
        }).done(function(data){ 
             resolve(ko.mapping.fromJS(result))
        }).fail( reject )
    });
}
MyObject.prototype = { ViewModel: { healthData: null } };

在此处创建新的MyObject时,它将自动在promise中实例化所需的数据。要访问和使用数据,请使用:

myInstanceOfMyObject.ViewModel.healthData.then(function(data){
    // Do whatever you want with the passed data here
});

这将解决您的一些异步问题,并大大简化结构。