【发布时间】:2014-11-05 09:46:51
【问题描述】:
假设我们有一个函数foo(item, callback) 和一个集合items。
我想做的是将items 中的每个项目替换为对其执行foo 返回的值,就像Array.map() 一样。
但是问题来了:foo 的结果是在回调中产生的,所以我无法在回调本身之外访问它(显然我无法更改 foo 以满足我的需要)。
你可以试试这样的方法
var results = [];
items.map((function(el) {
foo(el, function(result) {results.push(time)});
});
但是您无法知道您的 results 收藏何时“准备就绪”。
我完全不知道。 我该怎么办?模式是什么?
编辑:我对实现此目的的 Vanilla Javascript 方法比工具/库更感兴趣,反正这些都是可以接受的答案。
【问题讨论】:
-
提供的示例不是异步的。您的脚本将在 items.map 完成后继续执行,并且在 items.map 完成后,您的结果变量将立即“准备就绪”。
-
为什么?
foo函数的回调可以随时执行。 -
将代码包装在函数中并使用回调......
-
在我写了很长的评论解释为什么 foo 不被称为 async 之后,现在我看到你指的是提供给 foo 函数的回调,而不是 foo 本身的调用。对不起这是我的错。我在想,我会给出答案的。
-
@Ravi 将
setTimeout添加到您的回调中以复制异步调用和your code 中断。您的代码之所以有效,是因为您的回调被立即调用。
标签: javascript node.js asynchronous callback