我需要在对象一旦可用就执行它。 以下是我正在尝试实现的一些简化代码:
//Display profile should be called as soon as get profile returns its value
displayProfile( getProfile(link) );
var displayProfile = function( obj ){
console.log('Profile should display');
}
var getProfile = function( link ){
profiles[ link.attr('profile-name') ] = {
//Some profile specific info
}
//Profile object becomes ready to return after some time
setTimeout(function(){
console.log('Returning profile object');
return profiles[link.attr('profile-name')];
}, 400);
}
所以问题是displayProfile()
在配置文件对象准备好之前正在执行。有人建议我displayProfile()
只有在getProfile()
返回值后才能执行{{1}}吗?
答案 0 :(得分:0)
你想看看承诺或期货。如果您使用的是jQuery,它们的实现基于$.Deferred
。
答案 1 :(得分:0)
也许这可能会给你更多的承诺:
答案 2 :(得分:0)
操作是异步的,因此您需要使用某种回调或承诺。这是一个基本的回调示例:
var getProfile = function( link, callback ){
profiles[ link.attr('profile-name') ] = {
//Some profile specific info
}
//Profile object becomes ready to return after some time
setTimeout(function(){
console.log('Returning profile object');
callback(profiles[link.attr('profile-name')]);
}, 400);
}
getProfile(link, function(result){
displayProfile(result);
});
getProfile
函数现在将回调作为第二个参数,在计时器完成时调用,传递概要文件名称。