异步回调

Asynchrous callback?

本文关键字:回调 异步      更新时间:2023-09-26

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

类似于

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

链接到源就足够了。我在这里:

  • https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
  • http://www.html5rocks.com/en/tutorials/es6/promises/
  • http://s3.amazonaws.com/es6-promises/promise-1.0.0.js
  • http://code.jquery.com/jquery-1.11.1.js
  • http://www.impressivewebs.com/callback-functions-javascript/

JSFIDDLE

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.从那时起,如何使代码异步取决于您-线程、select、epoll等。但您负责与javascript事件循环接口(很可能使用select/poll/epoll实现,因此您不需要创建自己的)。

看起来您只需要将调用移动到callback():

var a = function(str,callback) {
    setTimeout(function() {
        console.log('This should be first: ' + str + '.');
        callback();
    }, 1000);
};