我尝试调用" ViewModel.healthData.get"两次。在这两种情况下,该方法都从Internet检索数据。我如何制作"数据"字段保留其数据?
someString in ($param) | someString not in ($param)
... |
"Apple", "Banana" |
| "Lemon", "Orange"
答案 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
});
这将解决您的一些异步问题,并大大简化结构。