2013-01-06 156 views
1

我有传递的对象呼叫的阵列上的每个的方法对象的异步方法:返回值异步方法

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

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

返回一个值(特别是在库中)不是一个不错的实践吗?

如果是,有解决方案吗?

+0

使你的'方法'也是异步的 - 将一个回调函数作为一个参数,并从'obj.asyncMethod'回调处理程序调用它。 –

+0

我应该接受'method'回调吗?什么时候应该执行,因为我不知道每个'asyncMethod'何时完成? –

+0

只有通过函数传递回调_if_“asyncMethod”被编码以期望回调。如上所述,没有足够的关于代码如何工作的信息来提供更准确的答案。 – natlee75

回答

2

函数只应返回一个值,如果它需要返回一个值。编写一个不返回任何东西的函数绝对没有错。

要回答你的其他问题:不,没有解决方案,因为method函数在异步方法执行之前会返回。

你甚至会回来什么?该代码将在for循环中经历n次迭代,那么如何知道哪个返回?

2

这是不错的做法,不要为异步操作返回值,这是预期的。接受一个回调函数作为参数。 node.js中有很多内置和外部库,它们都有接受回调参数的方法。

+0

回调函数可以传递给'method'方法,但是它被设置为'asyncMethod'的回调函数而不是'method'函数,我是否也接受'method'的回调函数?什么时候应该执行,因为我不知道每个'asyncMethod'何时完成? –

+0

有很多不同的方法可以处理这个问题。我头顶的一个想法是跟踪'for'循环的迭代次数,并且每次完成'asyncMethod'时增加一个数值,然后比较它们以知道所有执行完成的时间。在我们当前的项目中,我们沿着这些线做了一些事情,所以我们可以接受一种“onReady”类型的方法。 – natlee75