小编典典

概念-提炼诺言如何运作?

javascript

我看过许多实现,它们看起来都如此不同,以至于我无法真正提炼出诺言的实质。

如果我不得不猜测,它只是在触发回调时运行的函数。

有人可以在不带链接的几行代码中实现最基本的承诺。

片段1

var a1 = getPromiseForAjaxResult(ressource1url);
a1.then(function(res) {
    append(res);
    return a2;
});

该函数如何传递才能then知道何时运行。

也就是说,它如何传递回ajax完成时触发的回调代码。

片段2

// generic ajax call with configuration information and callback function
ajax(config_info, function() {
    // ajax completed, callback is firing.
});

这两个摘要有什么关系?

猜测:

// how to implement this

(function () {
    var publik = {};
        _private;
    publik.then = function(func){
        _private = func;
    };
    publik.getPromise = function(func){
        // ??
    };
    // ??
}())

阅读 304

收藏
2020-05-01

共1个答案

小编典典

有人可以在几行中实现最基本的承诺吗?

这里是:

function Promise(fn) {
    // takes a function as an argument that gets the fullfiller
    var callbacks = [], result;
    fn(function fulfill() {
        if (result) return;
        result = arguments;
        for (var c;c=callbacks.shift();)
            c.apply(null, arguments);
    });
    this.addCallback = function(c) {
        if (result)
            c.apply(null, result)
        else
            callbacks.push(c);
    }
}






Promise.prototype.then = function(fn) {
    var that = this;
    return new Promise(function(c){
        that.addCallback(function() {
            var result = fn.apply(null, arguments);
            if (result instanceof Promise)
                result.addCallback(c);
            else
                c(result);
        });
    });
};

这两个摘要有什么关系?

ajaxgetPromiseForAjaxResult函数调用:

function getPromiseForAjaxResult(ressource) {
    return new Promise(function(callback) {
        ajax({url:ressource}, callback);
    });
}
2020-05-01