【问题标题】:return value asynchronous method返回值异步方法
【发布时间】:2012-12-20 12:46:42
【问题描述】:

我有一个方法,它通过一个异步方法对每个对象调用一个对象数组:

function method(objs){
  for(obj in objs){
    obj.asyncMethod()
  }
}

我的想法是每个函数都应该返回一个值,但在这种情况下,该值应该基于异步方法的结果,所以这是不可能的。

不返回值(尤其是在库中)是一种不好的做法吗?

如果有,有解决办法吗?

【问题讨论】:

  • 使您的 method 也异步 - 将回调函数作为参数并从 obj.asyncMethod 回调处理程序中调用它。
  • 我是否也应该接受method 的回调?什么时候应该执行,因为我不知道每个asyncMethod 什么时候完成?
  • 只有将函数作为回调传入才有意义 if asyncMethod 被编码为期望回调。如前所述,没有足够的信息来说明您的代码是如何工作的,无法提供更准确的答案。

标签: javascript asynchronous return


【解决方案1】:

不为异步操作返回值是不错的做法,这是意料之中的。接受回调函数作为参数。在 node.js 中有很多内置和外部库具有接受回调作为参数的方法。

【讨论】:

  • 回调可以传递给method,但它被设置为asyncMethod的回调而不是method,我是否也应该接受method的回调?什么时候应该执行,因为我不知道每个asyncMethod 什么时候完成?
  • 您可以通过多种不同的方式来处理它。我想到的一个想法是跟踪for 循环的迭代次数,并为asyncMethod 的每次完成增加一个数值,然后比较它们以了解所有执行何时完成。我们在当前项目中按照这些思路做了一些事情,因此我们可以接受“onReady”类型的方法。
【解决方案2】:

函数只有在需要返回值时才应返回值。编写一个不返回任何内容的函数绝对没有错。

回答您的另一个问题:不,没有解决方案,因为 method 函数本质上会在异步方法执行之前返回。

你甚至会返回什么?代码将在 for 循环中进行 n 次迭代,那么您怎么知道要返回哪一个呢?

【讨论】:

    猜你喜欢
    • 2011-09-06
    • 2018-05-15
    • 1970-01-01
    • 2013-05-03
    • 2014-10-22
    • 2018-06-10
    • 1970-01-01
    • 2019-08-28
    • 1970-01-01
    相关资源
    最近更新 更多