Javascript 如何确保在返回值之前完成放大请求?
在我的一个文件中,我打电话如下:Javascript 如何确保在返回值之前完成放大请求?,javascript,ajax,caching,asynchronous,Javascript,Ajax,Caching,Asynchronous,在我的一个文件中,我打电话如下: var jobsString = getDropdownJobs(); 它调用此函数: function getDropdownJobs() { var jobsString = amplify.store("JobsList"); if (typeof jobsString === 'undefined') { // Amplify sends a request for getJobs, if it exists in
var jobsString = getDropdownJobs();
它调用此函数:
function getDropdownJobs() {
var jobsString = amplify.store("JobsList");
if (typeof jobsString === 'undefined') {
// Amplify sends a request for getJobs, if it exists in cache, it will return that value.
// If it does not exist in cache, it will make the AJAX request.
amplify.request("getJobs", function (data) {
// Leave a blank option for the default of no selection.
var jobsString = '<option value=""></option>';
// Append each of the options to the jobsString.
$.each(data.jobs, function () {
jobsString += "<option " + "value=" + this.JobNo_ + ">" + this.JobNo_ + " : " + this.Description + this.Description2 + "</option>";
});
// Store the jobsString to be used later.
amplify.store("JobsList", jobsString);
});
}
return jobsString;
}
无论何时返回,它都是未定义的。我在AJAX定义中添加了“async:false”,它没有改变任何东西
在返回之前,我如何确保值在那里?我不熟悉Amplify,但是说 通过
放大发出的请求。请求将始终异步解决
因此,您必须将回调传递到getDropdownJobs
,在jobsString
被填充后执行,任何依赖于该值的代码都会进入该回调
或者,您可以使用Amplify的发布/订阅系统在jobsString
被填充时订阅一个事件,并在getDropdownJobs
期间发布到该事件,如果我误解了您的问题,很抱歉,但每次您执行类似操作时,异步请求,您都需要等待答案。在我提出备选方案之前,我倾向于遵循一些快速提示:
- 通常,像您的
getJobsDropdown
这样的方法不会返回任何内容,或者可能会返回承诺。请阅读或阅读本文,以获取关于这些承诺的更高级的资料
- 您可以使用的最简单的东西是回调,它是
getJobsDropdown
调用程序上下文中的某个方法,您希望在其中处理数据。这将允许您在数据准备就绪时恢复程序李>
试试这个:
function getDropdownJobs(callback) {
// some code (...)
amplify.request("getJobs", function (data) {
// your processing and when done
callback();
});
}
您可以在回调中传递数据。getDropdownJobs
的一个常见调用是:
function processResults() { // This is your callback }
function getData() {
// This is where you call getDropDownJobs
getDropDownJobs(processResults);
}
这有用吗?我希望如此
干杯。如果您正在使用jQuery,并且不介意将amplify与jQuery框架耦合,则可以使用此插件,允许您使用jQuery延迟对象:
以下是一篇包含一些背景信息和插件使用概述的文章:
看一看。
function processResults() { // This is your callback }
function getData() {
// This is where you call getDropDownJobs
getDropDownJobs(processResults);
}