12行代码让回调变成顺序执行
function Next(){
this.funcs = [];
}
Next.prototype.next = function(callback){
this.funcs.push(callback);
return this;
}
Next.prototype.start = function(){
var func = this.funcs.shift();
func && func.apply(this,arguments);
}
exports = module.exports = Next;
下面是测试代码
var Next = require('./next.js');
var next = new Next();
var fs = require('fs');
next.next(function(a){
fs.stat(__filename, function (e,stat) {
if(e) throw e;
console.log(a);
next.start(stat);
})
}).next(function(stat){
fs.access(__filename, function (e) {
console.log('this file size=' + stat.size);
next.start( e ? false : true);
})
}).next(function(exists){
console.log('exists = '+exists);
}).start('start');
console.log('helloworld'+ next);
12 回复
好想笑,不过也鼓励下
挺好挺好,一个自己实现的promise,点赞!
低配版Promise……
mark
挺好😊
@captainblue2013 代码我没试过,确定这个能顺序执行?
但这还不算是 promise, 比如不能 promisify 一个函数, 也就不有用在 await 之后了
鼓励一下吧,恭喜你对js的运用又上了一个新高度。 不过一般没有其他需求的话都会用promise来实现,或者co+generator也可以,尝试学一学ECMA Script 6?
显然只是形式上同步,并不然保证顺序执行,更别提Promise了
可以的,确实搞定了`回调`的问题。
前面说不能顺序执行的,你们确定自己动手试了?
来自酷炫的 CNodeMD
赞一个👍
来自酷炫的 CNodeMD