功能清單:
promise.prototype.then()
promise.prototype.catch()
promise.reject()
promise.resolve()
promise.all()
promise.race()
promise.prototype.finally()
參考:prmoises a+規範
function promise(fn)
_this._value = val;
_this._status = "resolved";
while (callback = _this._onresolveds.shift())
} function reject(reason)
_this._reason = reason;
_this._status = "rejected";
while (callback = _this._onrejecteds.shift())
} try catch (err)
}
then (重點)promise.prototype.then = function (onresolved, onrejected)
onrejected = typeof onrejected === 'function'? onrejected:function(err)
var _this = this
var promise2 // then始終返回乙個promise例項,用於鏈式呼叫。
if (_this._status === "resolved") catch (e)
}, 0);
})} if (_this._status === "rejected") catch (e)
}, 0);
})} if (_this._status === "pending") catch (e)
}, 0);
});_this._onrejecteds.push(function () catch (e)
}, 0);
});})
} return promise2
};
根據onresolved/onrejected的返回值 x 的不同情況,呼叫promise2的resolve和rejectfunction resolvepromise (promise2, x, resolve, reject)
var called = false // 防止多次呼叫
if (x!== null && (typeof x ==='object' ||typeof x === 'function')) , function(err) )
} else
} catch (e)
} else
}
promise.prototype.catch = function (onrejected)
promise.resolve = function (value) )
}
promise.reject = function (reason) )
}
promise.all = function (promises)
var length = promises.length
var values =
return new promise(function (resolve, reject)
function resolvehandle(index) }}
promises.foreach(function (item, index) )
})}
promise.race = function (promises)
return new promise(function (resolve, reject)
function resolvehandle(value)
promises.foreach(function (item) )
})}
// 不管resolved還是rejected,都會執行,避免同樣的語句需要在then()和catch()中各寫一次的情況。
promise.prototype.finally = function (callback)
使用promises-aplus-tests
:全域性安裝npm i promises-aplus-tests -g
,然後命令列promises-aplus-tests [js檔名]
進行測試
注意:測試前要在尾部加上下面的**:
promise.deferred = promise.defer = function () ;
deferred.promise = new promise(function (resolve, reject) );
return deferred
};module.exports = promise
測試完成後可刪除
(function (global, factory) else if (typeof exports === 'object' && typeof module !== 'undefined') else
})(this, function () catch (e)
global.promise = promise
} return promisepolyfill
})
promisepolyfill() // 註冊promise全域性變數
實現自己的print
在嵌入式開發中,常常會通過串列埠列印一些資訊到pc終端,這就需要實現自己的printf函式,下面介紹列印函式print的實現。print.h ifndef print h define print h void print char fmt,void printch char ch void pri...
自己實現的TransactionManager
b 背景 b color red 目前有乙個系統,系統已經寫好了,但是要不停的新增新的功能,用struts,業務邏輯寫在action中,以後可能增加一層service。業務處理和持久層沒有使用任何框架,目前是用dao擔任業務處理加持久層雙重操作,但是有些業務處理很複雜,固設計了乙個事務處理框架,大家...
自己實現printf
原理不是很難網上有很多,自己搜一下就明白了。void printlog const char fmt,看到上面 太簡單了,也許有人會說,這有什麼用?在我看來最大的用處在於寫日誌,如果我們把 稍稍改下就可以把螢幕上的輸出一起輸出到檔案乙份 在初始化處把全域性變數日誌檔案開啟就像這樣 plogfile ...