在干净的JavaScript中等待异步函数

时间:2015-05-25 11:09:03

标签: javascript asynchronous

我目前正在使用XMLHttpRequest(),因此我有一个异步函数。我希望能够在XMLHttpRequest完成后运行一些代码。我的代码到目前为止:

var method = function() {
    this.func = function(param) {
        _xmlrequestfunc(param, function(r) {
            // return something
        }
    }
}

我希望能够使用此功能的内容如下:

method.func('POST').Then(
    // Do something when method.func() is finished
)

我想在干净的JavaScript中做到这一点......这是否可行,如果是这样,任何人都可以解释它是如何完成的?提前谢谢!

2 个答案:

答案 0 :(得分:1)

只需传递函数作为回调...

this.func = function(param, callback) {
    _xmlrequestfunc(param, function(r) {
        if(callback) callback();
        // return something
    }
}

.....
this.func({yourprams}, responseFunc);

function responseFunc() {
    //I am being called after the successful completion of XMLRequest.
}

答案 1 :(得分:1)

如果你想在干净的JS中使用它,你可以从func()返回这个自制的承诺:

var promise = {
    resolve: function (data) {
        this.callback(data);
    },
    Then: function (callback) {
        this.callback = callback;
    }
};

_xmlrequestfunc(param, function(r) {
    promise.resolve(42);
});

return promise;

这样您可以根据需要使用返回值:

method.func('POST').Then(function (theAnswer) {});