-3

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

看我的代码:

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

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

这可能吗?

4

3 回答 3

1

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

像这样的东西

var nickSetCallback;

function getNick(callback){
   nickSetCallback = callback;
}


// .. More code ..

nick = "something";

if(nickSetCallback !== undefined)
   nickSetCallback(nick);
于 2013-08-20T13:57:17.223 回答
1

这闻起来很像糟糕的代码。但是您可以使用计时器来完成。

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

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

于 2013-08-20T13:57:40.047 回答
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");
于 2013-08-20T14:00:11.900 回答