仅在值可用时执行函数

时间:2014-04-30 11:58:21

标签: javascript return

我需要在对象一旦可用就执行它。 以下是我正在尝试实现的一些简化代码:

//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}}吗?

3 个答案:

答案 0 :(得分:0)

你想看看承诺或期货。如果您使用的是jQuery,它们的实现基于$.Deferred

http://microjs.com/#promises

答案 1 :(得分:0)

也许这可能会给你更多的承诺:

https://api.jquery.com/promise/

答案 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函数现在将回调作为第二个参数,在计时器完成时调用,传递概要文件名称。