javascript - 如何从延迟返回值?

标签 javascript dojo callback deferred

我正在调用一个在延迟中具有某些逻辑的方法,当该逻辑完成时,我想将值返回给被调用者。见下文:

//Callee.js
var myAssistant = new Assistant();
console.log(myAssistant.whatIsTheValue());



//Assistant.js
whatIsTheValue : function(someArg) {
   var deferred = someService.getSomething();
   deferred.then(lang.hitch(this, this._getTheValue));

   //In theory, I want to return whatever this._getTheValue returns, how can I do that?!
}

_getTheValue() {
   ...
   ...
   return xyz;
}

最佳答案

Deferred 是异步操作。因此,您不能以正常方式从它们返回变量,因为它们在当前函数上下文完成之前不会执行。

如果您想对该值做更多的事情,您将需要根据另一个回调(IE 链接 then 语句)来这样做。

deferreds 的要点是为回调提供顺序操作。所以你可以将它们链接起来以获得你想要的结果。如果您需要结果在当前执行上下文中可用,您将必须找到一种同步(非延迟)方法来执行您想要的操作。

像这样

//Assistant.js
whatIsTheValue : function(someArg) {
   var deferred = someService.getSomething();
   var next = deferred.then(lang.hitch(this, this._getTheValue));
   next.then(/*insert next function here*/);
}

您需要了解,在 whatistheValue 完成操作之前,使用延迟的 lang.hitch 不会执行。因此,不是将值返回给任何名为 whatisthevalue 的函数,而是必须将处理该值的逻辑放入一个新函数中,并将其用作延迟的附加回调。这可能需要对您的程序进行一些重组。

关于javascript - 如何从延迟返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14263689/

相关文章:

javascript - 数据表:需要按 HTML 中的数据对列进行数字排序

javascript - 如何将对象添加到数组中javascript

javascript - 如何在拦截器模式中使用 dojo/promise/Promise.cancel()

ios - 完成 block 问题内的 RxSwift 订阅

javascript - 使用动态变量作为多维对象的键

javascript - Dojo 数据网格 : set conditionally editable column (change at runtime)

javascript - 如何将项目添加到 dojo 中的组合框?

jquery - Backbone.js $.ajax 集合 init 内的成功回调不调用同一集合中的函数

android - 如何在 galaxy nexus 中使用手电筒模式?

javascript - 是否可以使用 jQuery 隐藏和显示单选选项的 div 变得更简单?