不阻止的回调

Wal*_*uch 2 javascript asynchronous callback

我想写一个函数,它接受一个回调并在函数完成后调用它.

这很简单:

var callback = function (ref) {
    var i = 1337;
    while (i--) {
        console.log(ref, 'callback');
    }
};

var someFoo = function (ref, callback) {
    console.log(ref, 'self');

    callback(ref);
}

someFoo('one', callback); // 1
someFoo('two', callback); // 2
Run Code Online (Sandbox Code Playgroud)

但是在这里我someFoo遇到了这个问题:首先是呼叫阻塞,直到allback完成.这意味着此代码等效于此(在每个函数完成之前阻塞):

someFoo('one');
callback('one');
someFoo('two');
callback('two');
Run Code Online (Sandbox Code Playgroud)

现在的问题是:如何使回调调用异步?

Pau*_*aul 9

更改:

callback(ref);
Run Code Online (Sandbox Code Playgroud)

至:

setTimeout(function(){ callback(ref); }, 0);
Run Code Online (Sandbox Code Playgroud)

或者,由于您正在编写chrome扩展,因此不必担心旧版浏览器,您可以使用bind:

setTimeout(callback.bind(null, ref), 0);
Run Code Online (Sandbox Code Playgroud)

  • @WaleryStrauch不,唯一的其他方式会更脏. (3认同)