This question already has answers here:
How do I return the response from an asynchronous call?
(38个答案)
6年前关闭。
我在RequireJS中有一个模块:
define(['jquery','jsonLoader'],function($,jsonLoader){
执行
define([[“ jquery”,“ core”,“ template”,“ jsonLoader”,“ debugger”],
函数($,核心,模板,jsonLoader){
并且jsonLoader看起来是:
define([[“ jquery”],function($){
});
哪里有错?
在哪里叫它
承诺简介
现在,如果您进一步嵌套所有这些回调内容,它们可能会失控。使用jQuery Deferred,它看起来像这样:
(38个答案)
6年前关闭。
我在RequireJS中有一个模块:
define(['jquery','jsonLoader'],function($,jsonLoader){
function buildMenu()
{
jsonLoader('system/models/build/menu.json', function(data){
var output='';
// ...
return output;
});
}
return {
buildMenu : buildMenu
}
})
执行
buildMenu()
函数后,它将返回“ undefined”(因为在jsonLoader()
中定义的回调不会执行)。我在这里调用该函数:define([[“ jquery”,“ core”,“ template”,“ jsonLoader”,“ debugger”],
函数($,核心,模板,jsonLoader){
var config,
debug;
$(function() {
jsonLoader('system/config.json',function(data){
config = data;
init();
});
});
function init()
{
debug = new $.fn.debug;
if(config.application.debug == true)
debug.enabled = true
// Build menu
debug.log("Building Menu...");
console.log ( template.buildMenu() );
}
});
并且jsonLoader看起来是:
define([[“ jquery”],function($){
return function(name, callback){
$.get(name, function(data){
callback(data);
});
};
});
哪里有错?
最佳答案
define(['jquery', 'jsonLoader'], function($, jsonLoader){
function buildMenu(callback)
{
jsonLoader('system/models/build/menu.json', function(data){
var output='';
// ...
callback(output);
});
}
return {
buildMenu : buildMenu
}
});
在哪里叫它
define(["jquery", "core", "template", "jsonLoader", "debugger"], function($, core, template, jsonLoader) {
...
function init()
{
...
template.buildMenu(function(output) { console.log(output); } );
}
});
承诺简介
现在,如果您进一步嵌套所有这些回调内容,它们可能会失控。使用jQuery Deferred,它看起来像这样:
define(['jquery', 'jsonLoader'], function($, jsonLoader){
function buildMenu()
{
var d = $.Deferred();
jsonLoader('system/models/build/menu.json', function(data){
var output='';
// ...
d.resolve(output);
});
return d.promise();
}
return {
buildMenu : buildMenu
}
});
define(["jquery", "core", "template", "jsonLoader", "debugger"], function($, core, template, jsonLoader) {
var config,
debug;
$(function() {
jsonLoader('system/config.json').success(function(data){
config = data;
init();
});
});
function init()
{
debug = new $.fn.debug;
if(config.application.debug == true)
debug.enabled = true
// Build menu
debug.log("Building Menu...");
console.log ( template.buildMenu().success(function(output){console.log(output);}) );
}
});
define(["jquery"],function($){
return function(name){
var d = $.Deferred();
$.get(name, function(data){
d.resolve(data);
});
return d.promise();
};
});
10-06 07:46