Heute habe ich Promise.js aus der Git-Quellcode-Bibliothek heruntergeladen und festgestellt, dass der Quellcode basierend auf dem Web-Front-End-JavaScript geschrieben wird und nicht direkt für NodeJs verwendet werden kann. Glücklicherweise ist der Code nicht viel und nicht sehr kompliziert. Nach der Analyse und Integration wird es als Framework für NodeJS mit dem Code wie folgt implementiert:
(function () {/*** Copyright 2012-2013 (c) Pierre Duquesne <[email protected]>* Skript: Promise.js* Beschreibung: Versprechen NodeJS-Modul* modifiziert: https://github.com/stackp/promisejs* cromors: alwu007@sina this._callbacks = [];}; Versprechen.Prototype (this._isdone) {var resends = func.apply (Kontext, this.results); this.Results = Argumente; var Ergebnisse = []; if (! Versprechen ||! Versprechen.Length) {P.Done (Ergebnisse); Rückkehr p; } var numdone = 0; var Total = Versprechen.Length; Funktionsnotifier (i) {return function () {numdone += 1; Ergebnisse [i] = array.prototype.lice.call (Argumente); if (numdone === Gesamt) {P.Done (Ergebnisse); }}; } für (var i = 0; i <total; i ++) {Versprechen [i] .then (Notifier (i)); } return p;}; Versprechen.Chain = Funktion (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); Versprechen.Chain (funcs, argumente) .then (function () {P.Done.apply (p, Argumente);});}); } return p;};}) ();Der Testcode ist ebenfalls wie folgt beigefügt:
/*** Skript: test.js* Beschreibung: Promise.js Testcode**/var Promise = Request ('./ Mypromise'); Funktion 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 (). Dann (function () {return 'raymond';}, o) .then (function (err, name) {o.name = name; name; return asyncfoo (). Dann (asyncfoo) .then (function () {) {) {) (). }); });}). Dann (Funktion (err, sex) {o.sex = sex; return 'hello, world!';}). Dann (Funktion (err, say) {o.say = say; console.dir (o);}); syncfoo (). Dann (syncfoo) .then (function () {return syncfoo (). Dann (syncfoo) .then (function () {return 18;});});}, o) .Then (function (err, ay) {o.age = ay; asyncfoo (). Dann (als Asyncfoo). asyncfoo (). Dann (asyncfoo) .then (function () {return 'boy';}); return 'Hallo, Welt!';}). Dann (Funktion (err, say) {o.say = say; console.dir (o);});*/Funktion asyncfoo1 () {var p = new Promise.promise (); setTimeout (function () {P.Done (null, 'raymond');}, 1000); return p;} Funktion asyncfoo2 (err, name) {o.name = name; var p = New Promise.Promise (); setTimeout (function () {p.done (null, 18);}, 1000); return p;} Funktion asyncfoo3 (Err, Alter) {O.age = Alter; var p = New Promise.Promise (); setTimeout (function () {P.Done (null, 'boy');}, 1000); return p;} Funktion asyncfoo4 () {var p = new Promise.Promise (); setTimeout (function () {P.Done (null, 'Hallo, Welt!');}, 1000); return p;} versprechen.promise.chain ([asyncfoo1, asyncfoo2, asyncfoo3]). Dann (Funktion (err, sex) {o.sex = sex; return asyncfoo4 ();}). Dann (Funktion (err, sagen) {o.say = Say;}).