Hari ini, saya mengunduh Promise.js dari perpustakaan kode sumber git dan menemukan bahwa kode sumber ditulis berdasarkan javascript front-end web dan tidak dapat digunakan secara langsung untuk nodeJs. Untungnya, kodenya tidak banyak, juga tidak terlalu rumit. Setelah analisis dan integrasi, itu diimplementasikan sebagai kerangka kerja untuk nodeJS, dengan kode sebagai berikut:
(function () {/*** Hak Cipta 2012-2013 (c) Pierre Duquesne <[email protected]>* skrip: janji this._callbacks = [];}; janji.prototype.then = function (func, konteks) {// Metode untuk memproses hasil panggilan balik function docallbackResults (r) {if (r janji); (this._isdone) {var result = func.Apply (konteks, this.results); this.results = argumen; var hasil = []; if (! Promises ||! Promises.length) {p.done (hasil); mengembalikan P; } var numdone = 0; var total = janji.length; function notifier (i) {return function () {numDone += 1; Hasil [i] = array.prototype.slice.call (argumen); if (numdone === total) {p.done (hasil); }}; } untuk (var i = 0; i <total; i ++) {janji [i] .then (notifier (i)); } return p;}; janji.chain = function (funcs, args) {var p = new janji (); if (! funcs ||! func.length) {p.done.apply (p, args); } else {funcs [0] .Apply (null, args) .then (function () {func. } return p;};}) ();Kode tes juga dilampirkan sebagai berikut:
/*** skrip: test.js* Deskripsi: janji.js kode tes**/var janji = membutuhkan ('./ mypromise'); fungsi asyncfoo () {var p = new janji.promise (); setTimeout (function () {p.done ();}, 1000); return p;} function syncfoo () {var p = new janji.promise (); p.done (); return p;} var o = {};/*asyncfoo (). Kemudian (function () {return 'raymond';}, o) .then (function (err, name) {o.name = name; return asyncfoo (). kemudian (asyncfoo) .then (function () {return asyncfoo (). });});}, o) .then (function (err, usia) {o.age = usia; return asyncfoo (). Kemudian (asyncfoo) .then (function () {return asyncfoo (). });}). Lalu (function (err, sex) {o.sex = sex; return 'hello, world!';}). Kemudian (function (err, katakanlah) {o.say = katakan; console.dir (o);}); syncfoo (). kemudian (function () {return 'raymond';}, o). syncfoo().then(syncfoo).then(function(){ return syncfoo().then(syncfoo).then(function(){ return 18; }); });}, o).then(function(err, age){ o.age = age; return asyncfoo().then(asyncfoo).then(function(){ return asyncfoo (). Kemudian (asyncfoo) .then (function () {return 'boy';});}). Kemudian (function (err, sex) {return sex;});}). kemudian (function (err, sex) {o.sex = sex; kembalikan 'halo, dunia!';}). Kemudian (fungsi (err, katakanlah) {o.say = katakan; console.dir (o);});*/function asyncfoo1 () {var p = new janji.promise (); setTimeout (function () {p.done (null, 'raymond');}, 1000); return p;} function asyncfoo2 (err, name) {o.name = name; var p = new janji.promise (); setTimeout (function () {p.done (null, 18);}, 1000); return p;} function asyncfoo3 (err, usia) {o.age = usia; var p = new janji.promise (); setTimeout (function () {p.done (null, 'boy');}, 1000); return p;} function asyncfoo4 () {var p = new janji.promise (); setTimeout (function () {p.done (null, 'Hello, world!');}, 1000); return p;} janji.promise.chain ([asyncfoo1, asyncfoo2, asyncfoo3]). Kemudian (function (err, sex) {o.sex = sex; return asyncfoo4 ();}). kemudian (function (err, katakan) {o.say = katakan;}). Lalu (function) (function (err, console) {o.say = o.say = katakan;}). Lalu (function) (function (err, console) {o.say = Say;}).