2015-05-25 20 views
0

我目前正在使用XMLHttpRequest(),因此我有一個異步函數。我希望能夠在XMLHttpRequest完成後運行一些代碼。到目前爲止我的代碼: 在乾淨的JavaScript中等待異步函數

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 ...這是如果有的話,任何人都可以解釋它是如何完成的提前致謝!

+1

http://www.html5rocks.com/en/tutorials/es6/promise S / – Quentin

回答

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) {}); 
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. 
}