异步回调
Asynchrous callback?
如何编写自己的异步回调?
类似于
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);
}
那么,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.从那时起,如何使代码异步取决于您-线程、select、epoll等。但您负责与javascript事件循环接口(很可能使用select/poll/epoll实现,因此您不需要创建自己的)。
看起来您只需要将调用移动到callback()
:
var a = function(str,callback) {
setTimeout(function() {
console.log('This should be first: ' + str + '.');
callback();
}, 1000);
};
相关文章:
- Meteor:异步回调问题
- Meteor:异步函数回调异常:onAfterAction
- 异步中的回调函数出现问题'张贴'
- JavaScript中的异步回调
- 如何将此异步回调转换为生成器
- 在Nodejs中堆叠异步回调事件的最佳方式
- 如何使用jQuery等待来自回调的异步调用
- 从异步回调中获取值
- jasmine 2-在jasmine指定的超时时间内未调用异步回调.DEFAULT_TIMEOUT_INTERVAL
- 将数据注入异步回调(使用 node.js)
- 由于异步回调,变量被覆盖
- 与 promise 一起使用时,异步瀑布不执行下一个回调方法
- 如何将状态对象/数据传递给(异步)ajax 回调
- 管理Meteor中的异步回调
- 如何通过一个回调异步排队和执行多个promise
- 如何等到异步回调完成后才能使用检索到的数据
- 如何在node.js中通过API回调异步递归
- 将数据传递给node.js回调——异步问题
- 从回调(异步方法)内部访问对象文字属性
- 使 JavaScript 函数与回调异步