I am having a really peculiar case. I want to return
some data - data that is downloaded via ajax. So far async & sync modes don't get the data in time to the return
. Is it possible I could either call return
from a child function for the parent function or could a timeOut solve the issue? I can't think of another way of doing this, but the data must be returned.
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
The answer to your question is no.
In asynchronous requests, the function has to return before the result is available. To work around this, a callback pattern is used - when calling such a function, you don't expect a return, but rather provide it with a callback - a function to be called once the result is available.
Here's a simple example:
var someValue;
fetchValueFrom('http://example.com/some/url/with/value', function(val) {
someValue = val;
doSomethingElseWith(someValue);
});
Here we create a function and pass it in as a second param to the fetchValueFrom
call. Once the value is available this function will be called, and will set the variable and call another function to continue execution.
回答2:
You could provide a callback function:
function parentfunction(callback) {
callback(getAjax());
}
function childfunction() {
parentfunction(function(ajaxData) {
//Do stuff with data
});
}
回答3:
Just pass false
as a third parameter to to XMLHttpRequest.open
. It means "run this query synchronously".
See the reference for yourself.