等待发送回调,直到设置变量

时间:2013-08-20 13:54:03

标签: javascript

我想等待发送一个回调,直到设置一个变量;

查看我的代码:

function getNick(callback) {
    callback(nickName);
}

直到稍后在代码中才设置nickName变量..

这可能吗?

3 个答案:

答案 0 :(得分:1)

您可能更好地更改代码,但我想您可以将回调函数存储到变量中,然后在代码中调用它(在设置nickName之后)

像这样的东西

var nickSetCallback;

function getNick(callback){
   nickSetCallback = callback;
}


// .. More code ..

nick = "something";

if(nickSetCallback !== undefined)
   nickSetCallback(nick);

答案 1 :(得分:1)

这闻起来很像坏代码。但是你可以使用计时器来完成它。

function getNick(callback) {
    if(typeof nickName !== undefined) {
        callback(nickName);
    }
    else {
        setTimeout(getNick.bind(this, callback), 10);
    }
}

然而,更简洁的方法是使用例如比如jQuery的Deferred对象,你可以在其中添加回调,然后在设置昵称时触发它。

答案 2 :(得分:0)

使用像Knockout或Reactive Extensions这样的库,它提供了观察数据的机制。

以下是你在淘汰赛中的表现:

var nickName = ko.observable();
function getNick(callback) {
    if (nickName()) {
       callback(nickName());
    }
    else {
       var d = nickName.subscribe(function (n) {
           callback(n);
           d.dispose();
       });
    }
};

// ...
getNick(function (value) { ... });
nickName("bannannas");