编辑:添加反引号到回调模板.界面正在读取星号作为降价指示器,而不仅仅是星号!
在我正在编写的Windows DLL/Linux中,我为用户应用程序提供了一种注册回调函数的方法.效果很好.回调原型看起来像(void)(*callback)(void*);
我在编写文档时感到很偏执并意识到,我没有很好的方法知道注册地址是否有效.唯一的反馈是崩溃或调用try/catch中的回调.
我不知道如果回调不存在以及谁知道执行了什么会抛出什么异常.甚至不确定对"无处"的调用可以恢复到足以产生异常而不是崩溃.
是的,我知道这是用户的问题.只是想要深思熟虑,也许可以帮助用户理解他的错误.
那么,这会抛出什么异常?Windows和Linux如果不同则请回答.
或者,有没有更好的方法来解决这个问题,而不必使用异常捕获来检测丢失的函数?
我第一次尝试使用回调函数,但是无法正常工作.这是我的代码的简化版本:
var unsavedChanges = 1;
function saveData(callback)
{
// save data
if(typeof callback === "function")
{
unsavedChanges = 0;
callback.apply(arguments);
}
}
function nextStep(val)
{
if(unsavedChanges == 1)
{
saveData(nextStep, val);
return false;
}
console.log(val);
}
nextStep("test");
Run Code Online (Sandbox Code Playgroud)
JSFiddle:http://jsfiddle.net/tXqn3/
在我真正的"saveData"函数中,我正在使用保存数据,$.ajax()并且我在.done()函数中有回调.所以,这样一来,如果页面上有未保存的数据,则会保存,然后执行被调用的原始函数.
使用此代码,undefined代码运行时,值将打印到控制台.我究竟做错了什么?
我通过在线教程学习n00b.我在名为"response.php"的"服务器端"测试文件中有以下代码:
<?php
if (isset($_POST))
{
$answer = $_POST;
echo json_encode($answer);
} else {
echo json_encode(array('status' => false, 'msg' => 'no good'));
}
?>
Run Code Online (Sandbox Code Playgroud)
echo将数据返回到.ajaxjquery回调时,我是否总是必须使用?是否有其他方法将数据发送回客户端?
我有一个Javascript Windows 8应用程序.我正在使用C#编写WinRT组件DLL,以便与数据库连接.
对于所有函数,如OpenDB,ExecuteUpdate,ExecuteQuery(返回一行,返回一个列值),我已经完成了IASyncOperation并且非常成功.
但是为了逐个处理大结果集中的每一行,我需要将一个回调函数从javascript传递给C#WinRT组件DLL.所以代码就像,
My.WinRT.Component.Object.processEachRowASyc(query, arguments, function(row) {
/* Row specific processing */
}).then(function(result) {
/* Process after Entire Row processing is Complete */
});
Run Code Online (Sandbox Code Playgroud)
我写了这样的RT组件,
namespace mydb
{
public void delegate MyJSCallback(string msg);
public class Database {
public static IAsyncOperation<Database> OpenDB(string dbFile)
{
/* Open DB */
}
public IAsyncOperation<Database> ProcessEachRowASync(string sql,[ReadOnlyArray()] object[] arg, MyJSCallback myJSCallback)
{
return Task<Database>.Run(() =>
{
/* Query Processing */
IDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
string toRet = "{\"Name\":\"Raju\", \"Age\":\"21\"}";
//Javascript …Run Code Online (Sandbox Code Playgroud) 目前我有这样简单的JavaScript类:
function MyClass() {
// ... some code ...
this.Create = function() {
funcName = 'myTestFunc()';
cTimer = setTimeout(funcName, 1000);
}
// ... more code ...
var myTestFunc = function() {
alert ('everything\'s OK!');
}
// ... more code ...
}
Run Code Online (Sandbox Code Playgroud)
并测试它我正在使用此代码:
x = new MyClass();
x.Create();
Run Code Online (Sandbox Code Playgroud)
我有一些麻烦来执行这个功能的名字.如果我把just eval(funcName);而不是setTimeout调用它工作正常但无法弄清楚为什么它不能这样工作.
当然,这是更复杂代码的一部分,但其余代码与此问题无关.
我的问题很明显 - 如何通过名称设置为setTimeout函数的参数来执行函数?可能吗?
注意:将此函数设为public(this.myTestFunc = ...)不是一个选项!
funcName = "myTestFunc()";只是一个例子.在实际代码中它看起来像funcName = getRandomEffectFunctionName();!这只是一个随机值.
我开始使用异步编程,我正在创建一个nodejs应用程序,我在一些文件中切片代码:index.js,ctlUser.js,DAO.js等... .. Index.js是它需要的主文件ctlUser和ctlUser需要DAO.js ... DAO连接数据库并执行查询...
抽象,我的结构是这样的......
Index.js
var ctlUser = require('./ctlUser.js');
var username = ctlUser.getUserName('1');
console.log("Return from ctlUser" + username);
Run Code Online (Sandbox Code Playgroud)
ctlUser.js
var DAO = require('./DAO.js');
var getUserName = function(id){
var userName = DAO.executeQuery("SELECT username FROM tbUsers WHERE id = " + id );
console.log(Return from DAO = userName);
return username;
}
Run Code Online (Sandbox Code Playgroud)
DAO.js在这里一切都很好......
var mysql = require('mysql');
var executeQuery = function(query) {
var connection = mysql.createConnection({
host : SERVER,
user : USER,
password : PASSWORD,
database : DATABASE
});
connection.connect();
connection.query(query, …Run Code Online (Sandbox Code Playgroud) 我使用SDL 1.2.15打从libav(ffmpeg的)声音就像这个例子在这里。
我已经宣布要播放声音的课程。但是现在我必须在中存储该回调函数的指针SDL_AudioSpec::callback(在示例中wanted_spec.callback)。但是我的回调是我班的成员。
SDL中的回调指针是:
void (SDLCALL *callback)(void *userdata, Uint8 *stream, int len);
Run Code Online (Sandbox Code Playgroud)
哪里SDLCALL是__cdecl。
如何在我的成员函数中存储一个指针wanted_spec_.callback?
我在问这个问题之前试图研究回调 - 但是我写的东西却没有用.我首先定义函数,然后告诉它们运行onload.getelements()可以自行运行.
我试图加载元素,然后计算它们,用于数学显示随机索引之一.
function getelements() {
jQuery('#testimonial').load('http://www.example.com .testimonial');
}
function countelements() {
var elements = jQuery('div.testimonial').length;
console.log(elements);
}
window.onload = function () {
getelements(function () {
countelements();
});
}
Run Code Online (Sandbox Code Playgroud) 我已经设法编写一个模板类来像回调一样工作,从这个问题的接受答案中学习如何定义一般成员函数指针.
我希望有一个字符串键和回调值的映射,以便我可以调用匹配字符串的正确回调.这没关系,但我需要地图来支持来自不同类的回调.现在它只能用于一个类.它可以是任何类,因为模板只是来自同一个类的回调集合.
class Apple {
public:
void Red () {
cout << "aa";
}
};
class Orange {
public:
void Blue () {
cout << "bb";
}
};
template <typename T>
class Callback {
T *obj;
void (T::*ptr) (void);
public:
Callback (T *obj, void (T::*ptr) (void)) : obj (obj), ptr (ptr) {
}
void Call () {
(obj->*ptr) ();
}
};
Run Code Online (Sandbox Code Playgroud)
我可以这样使用它
Apple apple;
Orange orange;
Callback <Apple> callA (&apple, &Apple::Red);
Callback <Orange> callB (&orange, &Orange::Blue);
callA.call (); …Run Code Online (Sandbox Code Playgroud) c++ templates member-function-pointers function-pointers callback
用Javascript可能会写
var ids = ['item0', 'item1', 'item2', 'item3']; // variable length
function click_callback(number, event)
{
console.log('this is: ', number);
}
for (var k = 0; k < ids.length; k += 1)
{
document.getElementById(ids[k]).onclick = click_callback.bind(null, k);
}
Run Code Online (Sandbox Code Playgroud)
因此,即使在调用函数k时它已更改,我也可以将其注册时的值传递给回调函数。
Python有办法做一些等效的事情吗?
具体情况是这样(但我更喜欢一个一般性的答案):
我有可变数量的matplotlib图(每个坐标一个)。每个都有一个SpanSelector,出于某种原因,它被设计为仅将两个极限点传递给回调函数。但是,它们都具有相同的回调函数。所以我有:
def span_selected(min, max):
Run Code Online (Sandbox Code Playgroud)
但是我需要
def span_selected(which_coordinate, min, max):
Run Code Online (Sandbox Code Playgroud)
在注册回调时,我当然知道坐标,但是在调用函数时我需要知道它。在Javascript中,我会做类似的事情
callback = span_selected.bind(null, coordinate)
Run Code Online (Sandbox Code Playgroud)
我将在Python中做什么?