【发布时间】:2016-03-11 05:10:52
【问题描述】:
我是nodejs的新手,遇到一个简单的问题,但是解决不了。
例如,我有这样的功能:
var func = function(){
setTimeout(function(){
return 5;
}, 1000);
};
当我调用 func 时,我得到了“未定义”。我明白为什么,但我不明白如何更改我的函数以返回 5 而不是 undefined。
我可以使用回调参数重写 func,并从 setTimeout 调用回调,但我想从函数返回结果而不使用回调。
在 V8 中,我们有生成器和关键字“yield”,我认为它可能对我有帮助,所以任何人都可以解释它是如何工作的以及如何在这个例子中使用它。谢谢。
【问题讨论】:
-
从异步回调中获取返回值的想法根本上是荒谬的。在 Node 中,您必须为软件设计中的几乎所有内容考虑异步。这就是为什么 Node API 都涉及回调的原因,你的也一样。
-
好的,我理解你,看,我会尽力解释我的问题。我举了一个有问题的简单例子,但实际上问题是这样的:我有一个班级。它有一个异步执行某些操作的功能。我有这个类的一个实例数组,我想得到一个包含这些函数结果的数组。如果我这样写:array.map((e) => {e.func()}));比我得到填充“null”的数组,所以给我一段可以工作的代码。 Async.map 会这样做,但是怎么做呢?我听不懂
-
“所以给我一段可以工作的代码”...你真的只是这么说吗?
-
使用 Promise 是解决问题的一种方法:stackoverflow.com/questions/14220321/… 寻找
Promise.all()。 -
如果您想阻止投票的浪潮,请从您之前的评论中获取您的问题的实际描述并将其编辑到您的问题中,以便我们知道这里要解决的真正问题是什么。这里最好的问题描述了他们的实际问题,而不是他们尝试解决的问题。并且,放弃对“给我代码”的苛刻态度。你只是在这里和普通人交谈。如果您体谅他人、很好地描述您的问题并寻求帮助而不是要求帮助,我们更有可能提供帮助。
标签: javascript node.js callback generator yield