오늘 저는 GIT 소스 코드 라이브러리에서 Promise.js를 다운로드 한 결과 소스 코드가 웹 프론트 엔드 JavaScript를 기반으로 작성되었으며 Nodejs에 직접 사용할 수 없음을 발견했습니다. 다행히도 코드는별로 많지 않으며 매우 복잡하지도 않습니다. 분석 및 통합 후에는 코드가 다음과 같이 NodeJS의 프레임 워크로 구현됩니다.
(function () {/*** Copyright 2012-2013 (c) Pierre duquesne <[email protected]>* script : promise.js* 설명 : 약속 nodejs module* modified : https://github.com/stackp/promisejs* 저자 : [email protected]**/var prompe = orports. this._callbacks = [];}; promise.prototype.then = function (func, context) {// 콜백 백제 (r) {r.then (erver, value) {p.done (err, value); (this._isdone) {var results = 컨텍스트, this.results} else {function = func.Apply (컨텍스트); 인수; _ var i = 0; i <this._callbacks [i]. var results = []; if (! 약속 ||! 약속 .length) {p.done (results); 반환 p; } var numdone = 0; var total = 약속. 길이; 함수 Notifier (i) {return function () {numdone += 1; 결과 [i] = array.prototype.slice.call (인수); if (numdone === Total) {p.done (결과); }}; } for (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); } else {funcs [0] .apply (null, args) .then (function () {funcs.splice (0, 1); promise.chain (funcs, arguments) .then (function () {p.done.apply (p, arguments);}); } return p;};}) ();테스트 코드는 다음과 같이 첨부됩니다.
/*** 스크립트 : test.js* 설명 : Promise.js 테스트 코드**/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 () });});}, o). (함수 (err, age) {O.age = age; return asyncfoo (). });}). 그 다음 (함수 (err, sex) {O.sex = sex; return 'Hello, World! syncfoo (). 그런 다음 (syncfoo) .then (function () {return syncfoo (). 그런 다음 (syncfoo) .then (function () {return 18;});});}, o) .then (function (err, age) {O.age = age; return asyncfoo (). asyncfoo (). 그런 다음 (asyncfoo). return 'Hello, World!';}). 그런 다음 (function (err, say) {O.say = say; console.dir (o);});*/function asyncfoo1 () {var p = new Promise.Promise (); settimeout (function () {p.done (null, 'raymond');}, 1000); return p;} 함수 asyncfoo2 (err, name) {o.name = name; var p = new Promise.Promise (); settimeout (function () {p.done (null, 18);}, 1000); 반환 p;} 함수 asyncfoo3 (err, age) {O.age = 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])