【问题标题】:How to send a return form a callback function to the main function如何将回调函数的返回表单发送到主函数
【发布时间】:2011-10-16 13:16:53
【问题描述】:

我有这个小提琴http://jsfiddle.net/jdsans/38GFS/,我正在尝试锻炼,但我无法将回调函数的返回发送到主函数。回调函数包含我想要的结束返回值,但它没有返回。

当我使用 document.write() 函数打印返回值时,我得到了我想要的确切值,但正如我之前所说,它不会被返回。

请任何人都可以使用这个小提琴向我展示一个工作示例。我在小提琴中添加了更多细节作为 cmets,以便您理解我没有任何问题。

【问题讨论】:

  • 您可以尝试在这里重新创建一个您需要的最小示例吗?你的例子充满了不必要的细节。
  • 我试图创建这个webdesignerwall.com/demo/html5-grayscale。看到这个小提琴jsfiddle.net/jdsans/Fqt2q
  • 我的意思是,不是成品,只是回调的东西。只是做一个“hello world”之类的东西。

标签: javascript jquery html canvas grayscale


【解决方案1】:

看起来您正试图让异步回调返回一个值(对“同步”函数调用)。这就像试图在陆地上驾驶一艘船。范式不合适。

“返回值”的概念只存在于同步模型中。一个函数调用另一个函数,并且可以操作和返回值。但是您想要返回的值存在于函数回调中。也就是说你的整个执行线程会在回调函数之前执行,包括你保存返回值的部分。

您需要异步思考。不要返回值,使用它们来调用执行必要工作的其他函数。

我会尝试说明。假设我有代码:

  1. 做点什么
  2. 使用返回值的回调调用异步函数
  3. 使用返回值在屏幕上打印

async 的思想是在调用回调之前执行 1-3。这就是为什么它被称为回调!所以 3 将在我们获得值之前执行。那没有意义。相反,您需要更改代码才能执行:

  1. 做点什么
  2. 使用使用一个值并从上面执行 3 的回调调用异步函数。

【讨论】:

  • 谢谢,我会尝试按照你说的方式执行
  • 我可以使用 Javascript Promises 来实现您在这里尝试做的事情。
猜你喜欢
  • 1970-01-01
  • 2017-06-29
  • 1970-01-01
  • 1970-01-01
  • 2015-07-02
  • 1970-01-01
  • 1970-01-01
  • 2022-07-05
  • 1970-01-01
相关资源
最近更新 更多