从嵌套回调函数中提取返回值
为了简化我的问题,我对代码进行了一些修改。 我现在能够从回调函数中获取值,我现在想将此数据传递给变量。
使用Javascript
如何让PostInformation返回args?
function AjaxRequest(callback) { var hasErrors = false; dojo.xhrPost({ url: 'hello', content: SomeData, load: function (formErrors) { //preform some operation //set hasErrors to true hasErrors = true; if (typeof callback === "function") callback(hasErrors); }, error: function (e) { console.log(e + ' page not posted error'); } }); } function PostInformation() { try { AjaxRequest(function (args) { console.log('The hasErrors is ' + args); return args; }); } catch (e) { console.log(e); } }
您在发送请求时调用handleServerResponse
,而不是在回调中调用。 它应该是:
var doesErrorsExist = postToServer(function() { handleServerResponse(containers, function (args) { return args; }); });
但是这仍然不起作用 – 异步函数永远不会向其调用者返回一个值,因为在函数返回后操作完成之前该值将不存在。
我没有试图找出你想要做的所有事情的逻辑,所以我没有具体的建议如何解决这个问题。 我想如果你重新阅读你所链接的问题,你应该获得更多的洞察力。
经过一些测试,我意识到我只需要AjaxRequest函数在函数末尾返回数据,并声明一个等于AjaxRequest的变量,并使用回调函数返回其值。 在我的代码下面。
如果这个解决方案不是最合适的请评论。
function AjaxRequest(callback) { var hasErrors = false; dojo.xhrPost({ url: 'hello', content: SomeData, load: function (formErrors) { //preform some operation //set hasErrors to true hasErrors = true; //if (typeof callback === "function") callback(hasErrors); }, error: function (e) { console.log(e + ' page not posted error'); } }); return hasErrors; } function PostInformation() { try { var results = AjaxRequest(function (args) { //console.log('The hasErrors is ' + args); return args; }); return results; } catch (e) { console.log(e); } }