如何编写自己的异步回调?
喜欢
var a = function(str,callback) {
setTimeout(function() {
console.log('This should be first: ' + str + '.')
},1000);
callback();
}
a('hello', function() {
console.log('This should be second.');
}
指向源的链接就足够了。 我在这里:
答案 0 :(得分:1)
当Javascript代码调用异步函数时,它是异步的。
那么,是什么让一个函数异步?
javascript函数在调用异步函数时是异步的:
function myAsyncFunction (callback) {
setTimeout(function(){callback()}, 100);
}
那么,setTimeout
或element.onchange
如何实施?
他们已在C中实施。
对于通用后台处理,setTimeout
和setInterval
是javascript为您提供的事件循环的最低级别接口。因此,要在纯JavaScript中实现您自己的异步函数,您需要使用setTimeout
。
例如,如果我们采用您的原始代码,我们可以通过简单地执行此操作使其异步:
var a = function(str,callback) {
setTimeout(function() {
console.log('This should be first: ' + str + '.')
},1000);
setTimeout(callback,1001);
}
对于需要以其他方式处理的功能,例如运行另一个线程或读取文件或查询数据库,您无法在纯JavaScript中执行此操作。您需要修改C中的浏览器代码。不同的浏览器有不同的方式来执行此操作"官方"使用插件(这就是Flash和Java之类的实现方式)。有些浏览器根本不允许你这样做。
Node.js允许您使用Addon API在C中编写模块:http://nodejs.org/api/addons.html。从那以后,你如何使你的代码异步取决于你 - 线程,选择,epoll等。但你负责与javascript事件循环接口(最有可能使用select / poll / epoll实现,所以你不要这样做需要创建自己的。)
答案 1 :(得分:0)
看起来您只需要将呼叫转移到callback()
:
var a = function(str,callback) {
setTimeout(function() {
console.log('This should be first: ' + str + '.');
callback();
}, 1000);
};