Сегодня я загрузил Orders.js из библиотеки исходного кода GIT и обнаружил, что исходный код написан на основе веб-фронтального JavaScript и не может быть использован непосредственно для NodeJS. К счастью, код не так много, и он не очень сложный. После анализа и интеграции он реализован как структура для Nodejs, а код следующим образом:
(function () {/*** Copyright 2012-2013 (c) Pierre Duquesne <[email protected]>* script: vordy.js* Описание: Обещает модуль Nodejs* Модифицирован: https://github.com/stackp/promisejs* aysports = alwu007 this._callback = [];}; Spear.prototype.Then = function (func, context) {// Методы обработки результатов обратного вызова docallbackresults (r) {if (r exantyof promise) {r.then (function (err, values) {p.done (err, values); (this._isdone) {var results = func.apply (context, this.results); this._isdone = true; var results = []; if (! обещания ||! обещания.length) {p.done (результаты); возврат P; } var numdone = 0; var total = обещания. Уведомление о функции (i) {return function () {numdone += 1; Результаты [i] = array.prototype.slice.call (аргументы); if (numdone === total) {p.done (результаты); }}; } for (var i = 0; i <total; i ++) {обещания [i] .Then (уведомление (i)); } return p;}; rape.chain = function (funcs, args) {var p = new Orders (); if (! funcs ||! funcs.length) {p.done.apply (p, args); } else {funcs [0] .apply (null, args) .then (function () {funcs.splice (0, 1); respers.chain (funcs, аргументы) .then (function () {p.done.apply (p, аргументы);});}); } return p;};}) ();Тестовый код также прилагается следующим образом:
/*** Скрипт: test.js* Описание: тестовый код Order.js**/var promise = require ('./ mypromise'); function asyncfoo () {var p = new Orders.promise (); settimeout (function () {p.done ();}, 1000); return p;} function syncfoo () {var p = new Orders.promise (); p.done (); вернуть p;} var o = {};/*asyncfoo (). then (function () {return 'raymond';}, o) .then (function (err, name) {o.name = name; return asyncfoo (). Тогда (asyncfoo) .then (function () {return asyncfoo (). then (asyncfoo). Then (function () {return asyncfoo (). then (asyncfoo). }); });}). Тогда (function (err, sex) {o.sex = sex; return 'hello, world!';}). Тогда (function (err, say) {o.say = say; console.dir (o);}); syncfoo (). Тогда (function () {return 'raymond';}, O). syncfoo (). then (syncfoo) .then (function () {return syncfoo (). then (syncfoo) .Then (function () {return 18;});});}, o) .Then (funct asyncfoo (). Затем (asyncfoo) .then (function () {return 'boy';}); вернуть 'Привет, мир!';}). Тогда (function (err, say) {o.say = say; console.dir (o);});*/function asyncfoo1 () {var p = new обещание.promise (); setTimeout (function () {p.done (null, 'raymond');}, 1000); return p;} function asyncfoo2 (err, name) {o.name = name; var p = новое обещание.promise (); settimeout (function () {p.done (null, 18);}, 1000); return p;} function asyncfoo3 (err, age) {o.age = age; var p = новое обещание.promise (); settimeout (function () {p.done (null, 'boy');}, 1000); return p;} function asyncfoo4 () {var p = new обещание.promise (); setTimeout (function () {p.done (null, 'hello, world!');}, 1000); return p;} spect.promise.chain ([[asyncfoo1, asyncfoo2, asyncfoo3]). Тогда (function (err, sex) {o.sex = sex; return asyncfoo4 ();}). Тогда (function (err, скажем) {o.say = say;}). Тогда () {console.