我看过许多实现,它们看起来都如此不同,以至于我无法真正提炼出诺言的实质。
如果我不得不猜测,它只是在触发回调时运行的函数。
有人可以在不带链接的几行代码中实现最基本的承诺。
片段1
var a1 = getPromiseForAjaxResult(ressource1url); a1.then(function(res) { append(res); return a2; });
该函数如何传递才能then知道何时运行。
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){ // ?? }; // ?? }())
有人可以在几行中实现最基本的承诺吗?
这里是:
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); }); }); };
ajax从getPromiseForAjaxResult函数调用:
ajax
getPromiseForAjaxResult
function getPromiseForAjaxResult(ressource) { return new Promise(function(callback) { ajax({url:ressource}, callback); }); }