اليوم ، قمت بتنزيل Promise.js من مكتبة GIT Source Code ووجدت أن الكود المصدري مكتوب استنادًا إلى JavaScript الأمامي على الويب ولا يمكن استخدامه مباشرة في NodeJs. لحسن الحظ ، فإن الكود ليس كثيرًا ، كما أنه ليس معقدًا للغاية. بعد التحليل والتكامل ، يتم تنفيذها كإطار عمل لـ NodeJS ، مع الكود على النحو التالي:
(function () {/*** حقوق الطبع والنشر 2012-2013 (C) Pierre Duquesne <[email protected]>* البرنامج النصي: Promise.js* الوصف: يعد NodeJS Module* modified: https://github.com/stackp/promisjs uperators: alwu007@sina this._callbacks = [] ؛ (this._isdone) الوسيطات ؛ نتائج var = [] ؛ if (! العودة P ؛ } var numDone = 0 ؛ VAR TOTAL = PROMISMS.LENGTH ؛ دالة Sotfier (i) {return function () {numDone += 1 ؛ النتائج [i] = array.prototype.slice.call (الوسائط) ؛ if (numDone === total) {p.done (النتائج) ؛ }} ؛ } لـ (var i = 0 ؛ i <total ؛ i ++) {الوعود [i]. } return p ؛} ؛ promise.chain = function (funcs ، args) {var p = new promise () ؛ if (! funcs ||! funcs.length) {p.done.apply (p ، args) ؛ } آخر {funcs [0] .apply (null ، args) .Then (function () {funcs.splice (0 ، 1) ؛ promise.chain (funcs ، الحجج). } return p ؛} ؛}) () ؛يتم إرفاق رمز الاختبار أيضًا على النحو التالي:
/*** البرنامج النصي: test.js* الوصف: Promise.js Test Code**/var promise = require ('./ myPromise') ؛ وظيفة asyncfoo () {var p = new promise.promise () ؛ setTimeOut (function () {p.done () ؛} ، 1000) ؛ return p ؛} وظيفة syncfoo () {var p = new promise.promise () ؛ P.Done () ؛ return p ؛} var o = {} ؛/*asyncfoo (). ثم (function () {return 'raymond' ؛} ، o) .Then (function (err ، name) {o.name = name ؛ return asyncfoo (). }) ؛}) ؛} ، o). }) ؛}). syncfoo (). ثم (syncfoo) .Then (function () {return syncfoo (). ثم (syncfoo) .Then (function () {return 18 ؛}) ؛}) ؛ Asyncfoo (). إرجاع 'hello ، world!' ؛}). setTimeOut (function () {p.done (null ، 'raymond') ؛} ، 1000) ؛ إرجاع p ؛} دالة asyncfoo2 (err ، الاسم) {o.name = name ؛ var p = New Promise.Promise () ؛ setTimeOut (function () {p.done (null ، 18) ؛} ، 1000) ؛ return p ؛} وظيفة asyncfoo3 (err ، العمر) {o.age = العمر ؛ var p = New Promise.Promise () ؛ setTimeOut (function () {p.done (null ، 'boy') ؛} ، 1000) ؛ return p ؛} وظيفة asyncfoo4 () {var p = new promise.promise () ؛ setTimeOut (function () {p.done (null ، 'hello ، world!') ؛} ، 1000) ؛ return p ؛} promise.promise.chain ([asyncfoo1 ، asyncfoo2 ، asyncfoo3]).