วันนี้ฉันดาวน์โหลด Promise.js จากไลบรารีซอร์สโค้ด GIT และพบว่าซอร์สโค้ดถูกเขียนขึ้นอยู่กับ JavaScript Web Front-end และไม่สามารถใช้โดยตรงกับ NodeJS โชคดีที่รหัสไม่มากและไม่ซับซ้อนมาก หลังจากการวิเคราะห์และการรวมมันจะถูกนำไปใช้เป็นกรอบสำหรับ nodejs โดยมีรหัสดังนี้:
(ฟังก์ชั่น () {/*** ลิขสิทธิ์ 2012-2013 (c) Pierre duquesne <[email protected]>* สคริปต์: Promise.js* คำอธิบาย: สัญญาโมดูล nodejs* แก้ไข: https://github.com/stackp/promisejs* this._callbacks = [];}; pression.prototype.then = ฟังก์ชั่น (func, บริบท) {// วิธีการสำหรับการประมวลผลผลลัพธ์การเรียกกลับฟังก์ชั่น docallbackresults (r) {ถ้า (raspenf)}}}}}}}}}; if (this._isdone) {ผลลัพธ์ var = func.apply (บริบท this.results); docallbackresults (ผลลัพธ์); this.results = อาร์กิวเมนต์; ผลลัพธ์ var = []; if (! สัญญา ||! promises.length) {p.done (ผลลัพธ์); กลับ P; } var numdone = 0; var total = promises.length; ฟังก์ชันแจ้งเตือน (i) {return function () {numdone += 1; ผลลัพธ์ [i] = array.prototype.slice.call (อาร์กิวเมนต์); if (numdone === รวม) {p.done (ผลลัพธ์); - } สำหรับ (var i = 0; i <total; i ++) {สัญญา [i]. จากนั้น (notifier (i)); } return p;}; promise.chain = function (funcs, args) {var p = new Promise (); if (! funcs ||! funcs.length) {p.done.apply (p, args); } else {funcs [0] .apply (null, args). จากนั้น (ฟังก์ชั่น () {funcs.splice (0, 1); promise.chain (funcs, อาร์กิวเมนต์). แล้ว () {p.done.apply (p, อาร์กิวเมนต์);});}); } return p;};}) ();รหัสทดสอบยังแนบมาดังนี้:
/*** สคริปต์: test.js* คำอธิบาย: Promise.js รหัสทดสอบ**/var promise = require ('./ myPromise'); ฟังก์ชั่น asyncfoo () {var p = new promise.promise (); settimeout (function () {p.done ();}, 1000); return p;} function syncfoo () {var p = new promise.promise (); p.done (); return p;} var o = {};/*asyncfoo (). จากนั้น (ฟังก์ชั่น () {return 'raymond';}, o). จากนั้น (ฟังก์ชั่น (err, ชื่อ) {o.name = name; return asyncfoo (asyncf) });}; });}) จากนั้น (ฟังก์ชั่น (err, sex) {o.sex = sex; return 'hello, world!';}) จากนั้น (ฟังก์ชั่น (err, พูด) {o.say = พูด; console.dir (o);}); syncfoo (). จากนั้น (syncfoo). จากนั้น (ฟังก์ชั่น () {return syncfoo (). จากนั้น (syncfoo). จากนั้น (ฟังก์ชั่น () {return 18;});});}, o). แล้วฟังก์ชั่น (err, อายุ) asyncfoo (). จากนั้น (asyncfoo). แล้วฟังก์ชั่น () {return 'boy';}); return 'Hello, World!';}) จากนั้น (ฟังก์ชั่น (err, say) {o.say = say; console.dir (o);});*/ฟังก์ชัน asyncfoo1 () {var p = new promise.promise (); settimeout (function () {p.done (null, 'Raymond');}, 1000); return p;} function asyncfoo2 (err, ชื่อ) {o.name = name; var p = สัญญาใหม่ promise (); settimeout (function () {p.done (null, 18);}, 1000); return p;} ฟังก์ชั่น asyncfoo3 (err, อายุ) {o.age = age; var p = สัญญาใหม่ 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]) จากนั้น (ฟังก์ชั่น (err, sex) {o.sex = เพศ; return asyncfoo4 ();})