12行代码让回调变成顺序执行
发布于 3 个月前 作者 zengming00 1234 次浏览 来自 分享
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……

@captainblue2013 代码我没试过,确定这个能顺序执行?

但这还不算是 promise, 比如不能 promisify 一个函数, 也就不有用在 await 之后了

鼓励一下吧,恭喜你对js的运用又上了一个新高度。 不过一般没有其他需求的话都会用promise来实现,或者co+generator也可以,尝试学一学ECMA Script 6?

显然只是形式上同步,并不然保证顺序执行,更别提Promise了

可以的,确实搞定了`回调`的问题。

前面说不能顺序执行的,你们确定自己动手试了?

来自酷炫的 CNodeMD

赞一个👍

来自酷炫的 CNodeMD

回到顶部