异步回调?

时间:2014-08-26 07:40:07

标签: javascript

如何编写自己的异步回调?

喜欢

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.');
}

指向源的链接就足够了。 我在这里:

JSFIDDLE

2 个答案:

答案 0 :(得分:1)

当Javascript代码调用异步函数时,它是异步的。

那么,是什么让一个函数异步?

javascript函数在调用异步函数时是异步的:

function myAsyncFunction (callback) {
    setTimeout(function(){callback()}, 100);
}

那么,setTimeoutelement.onchange如何实施?

他们已在C中实施。

对于通用后台处理,setTimeoutsetInterval是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);
};