从嵌套回调函数中提取返回值

为了简化我的问题,我对代码进行了一些修改。 我现在能够从回调函数中获取值,我现在想将此数据传递给变量。

使用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); } }