问题标签 [callback]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
254 浏览

javascript - 根据它们的构造方式,回调也可以定义为闭包吗?

在 JavaScript 中,我知道闭包可以定义为嵌套函数,该函数可以访问其包含函数的变量。例如:

onreadystatechange现在,下面的代码正在为请求对象的属性建立一个回调;但是,我想知道根据定义,这是否也被认为是一个闭包

我意识到该handleResponse函数也可以在 的上下文中编写为匿名函数submitHandler,但我发现如果在函数回调范围之外定义回调,更复杂的 Ajax 代码可以更易读和更容易维护。同样,这是一个人为的例子,我正在使用它来简单地展示我的问题的重点。

0 投票
1 回答
671 浏览

visual-studio-2005 - Visual Studio 2005 中的函数指针不正确,代码从 1 字节偏移开始

有问题的代码挂接到 explorer.exe,但在进入回调函数时崩溃:

调用栈:

Visual Studio 2005 给出了以下反汇编:

而0x548B0CC4周围的内存都是?????? 所以它不是映射内存,因此崩溃。

myCallWndProcRetCallback 开头的机器代码是这样的:

但 Visual Studio 有时也会为此函数提供以下反汇编:

这看起来像是正确的反汇编,但它比上面的反汇编晚 1 个字节!您可以看到从 0x60055B58 开始的指令是相同的。

因此,看起来链接器说函数位于 0x60055B50,但代码实际上从 0x60055B51 开始。我已经确认前者是设置到 Windows 挂钩中的回调。因此,当 Windows 回调函数时,它会执行错误的代码。

我的问题是链接器怎么会出错?我进行了重建,问题消失了,这似乎是随机的。当时 /FORCE:MULTIPLE 链接器选项有效,但如果没有它,则不会报告此回调的链接错误。

后期添加:这可能与 DLL 的重定位或变基有关吗?如果重定位偏移了 1 个字节,这可能会导致问题吗?

0 投票
1 回答
2434 浏览

c - 将 VB 回调函数传递给 C dll - noob 被卡住

VB 中的回调(来自 C dll)。

我需要将 vb 函数作为回调传递给 dll 中的 ac 函数。我知道我需要为该功能使用 addressof ,但我对如何做到这一点越来越感到困惑。

细节:

我将回调地址传递给的 dll 中的函数在 C 中定义为:

其中函数是参数 7,*streamCallback。PaStreamCallback 类型是这样定义的:

在我的 vb 项目中,我有:

(如果我输错了其他一些参数,请不要担心,我稍后会找到它们!现在让我们专注于回调。)

在 module1.vb 我定义了回调函数:

Function MyCallback( ByVal inp As Byte, _ ByVal outp As Byte, _ ByVal framecount As Long, _ ByVal pastreamcallbacktimeinfo As Byte, _ ByVal pastreamcallbackflags As Byte, _ ByVal userdata As Byte) As Integer ' 在这里做聪明的事情 End Function

dll中的外部函数被调用

这在外部函数的声明中被破坏了——它不喜欢 IntPtr 类型作为 AddressOf 的函数指针。

谁能告诉我如何实现传递这个回调函数?

非常感谢大卫

0 投票
8 回答
208105 浏览

javascript - 更好地理解 JavaScript 中的回调函数

我理解将一个函数作为回调传递给另一个函数并让它执行,但我不了解执行此操作的最佳实现。我正在寻找一个非常基本的示例,如下所示:

在 myFirstFunction 中,如果我确实返回了新的回调(),那么它会工作并执行匿名函数,但这对我来说似乎不是正确的方法。

0 投票
2 回答
36431 浏览

javascript - 如何将多个参数传递给 javascript 回调函数?

Javascript代码:

问题是如果我将函数 doSomething 更改为

我必须将相应的行(标记为//*.*)更改SomeClass

(*.*)无论“doSomething”函数的参数数量如何更改,如何避免更改行?

非常感谢!

0 投票
1 回答
648 浏览

asp.net - 使用什么:Asp.net 应用程序中的回调、AjAX 或简单的 Javascript

至于什么是这项工作的最佳工具,我有点不知所措:

我需要什么:父页面有一个链接,当点击一个pop-up会弹出一个gridview和一个save按钮。

如果用户保存了gridview,父页面应该刷新和更改,换句话说,我需要能够在客户端和服务器之间传递数据。也许,我应该提到该Save按钮将保存gridview数据库中的数据,我希望关闭弹出窗口并刷新父页面。

我正在使用 ASP.NET 2.0,目前没有安装 AJAX 库。我在 ASP.NET 中查看CallBack并倾向于使用它,因为在这种情况下它似乎是最简单的。

编辑:也许我还应该提到我希望父页面在子窗口启动时处于非活动状态......

你会推荐使用什么?谢谢!

0 投票
1 回答
2038 浏览

asp.net - 回调和 asp.net gridview

我有以下情况。我有一个gridview,我需要向它动态添加行。一切正常,花花公子。然而,最近,我对让这个过程更快、更有用感到好奇。我在 asp.net 2.0 中发现了一个回调功能。

对于使用 gridview 来显示某些内容的情况,这似乎是有意义的。但是,以编程方式添加一行需要向 DataTable 添加一行(即绑定到的 gridview)。由于 DataTable 驻留在服务器上,据我了解,在这里使用 Callback 没有意义......

是一个很好的教程,概述了主要内容。

在第 5 步中:

“要完成异步加载,我们必须实现由我们在步骤 3 中实现的 ICallbackEventHandler 接口定义的两种方法。其中一种方法将 DataTable 绑定到 GridView 并呈现控件。”

据我所知,没有办法在没有回发的情况下向gridview动态添加行......有什么想法吗?

0 投票
1 回答
2384 浏览

ruby - 真正的 sinatra(ruby/rack) after_filter 的最快方法是什么?

好的,这是一个简单的任务。在将 html 呈现给客户端后,我想使用请求中的信息执行 db 调用。

我正在使用 sinatra,因为它是一个轻量级的微框架,但如果它更快/更容易(机架?),我真的很喜欢 ruby​​ 中的任何东西。我只想获取 url 并根据 url 将客户端重定向到其他地方。

那么,如何使用 rack/sinatra 作为一个真正的 after_filter。而 after_filter 我的意思是在响应发送到客户端之后。还是没有线程就无法实现?

我分叉了 sinatra 并添加了过滤器,但是没有办法刷新响应,即使是假设流文件(显然是二进制文件)的 send_data 也会等待 after_filters。

我见过这个问题:Multipart-response-in-ruby,但答案是针对rails的。而且我不确定它是否真的刷新了对客户端的响应,然后允许之后进行处理。

Rack::Callbacks 在回调之前和之后都有一些回调,但即使是那些看起来它们会在响应发送到客户端之前运行这里的Rack::Callbacks实现(添加评论):

所以我知道我可以用 rake 通过 shell 调用后台任务。但是最好不要太...还有NeverBlock但这对于执行单独的进程而不延迟响应是否有好处,或者它仍然会使应用程序整体等待(我认为它会)?

我知道这很多,但简而言之,它是在 ruby​​/sinatra/rack 中发送响应之后真正运行的简单 after_filter。

感谢您阅读或回答我的问题!:-)

0 投票
4 回答
1981 浏览

c++ - 来自绑定方法的原始函数指针

我需要将一个方法绑定到一个函数回调中,除了这个片段不合法,如demote-boostfunction-to-a-plain-function-pointer中讨论的那样。

获得这种行为的最简单方法是什么?

0 投票
4 回答
5172 浏览

c - C 中的“CALLBACK”声明有什么作用?

我正在查看SDL库中的一些代码,并遇到了一个声明如下的函数:

现在,我是一名 Delphi 编码员。没有 hablo C muy bien,先生。但我记得我大学课程的语法足够多,可以这样阅读:

函数名称是 WndProc。参数列表是不言自明的。函数返回类型是 LRESULT。但是那个“CALLBACK”到底在做什么呢?在 Delphi 中,任何函数都可以用作回调;您只需要传递正确类型的函数指针。有什么特别的原因导致 C 不能这样工作吗?或者它是否意味着不同的东西?