الوعد/المؤجل هو مواصفات جيدة للتعامل مع ترميز المكالمات غير المتزامنة. يستخدم ما يلي رمز NodeJS كفئة لتنفيذ تطبيق بسيط للوعد/مواصفات
نسخة الكود كما يلي:
/**
* تم إنشاؤها مع jetbrains webstorm.
* المستخدم: Xuwenmin
* التاريخ: 14-4-1
* الوقت: 9:54 صباحًا
* لتغيير ملف استخدام القالب هذا | الإعدادات | قوالب الملفات.
*/
var eventEmitter = require ("الأحداث"). EventEmitter ؛
var http = require ('http') ؛
var util = require ('Util') ؛
// تحديد كائن الوعد
var promise = function () {
// تنفيذ فئة حدث الميراث
eventemitter.call (هذا) ؛
}
// الطريقة العامة لراث الأحداث
util.inherits (الوعد ، eventemitter) ؛
// ثم الطريقة هي الطريقة في الوعد/المواصفات
promise.prototype.then = function (SuccessHandler ، errorHandler ، ProgressHandler) {
if (typeof successHandler == 'function') {
this.once ("النجاح" ، SuccessHandler) ؛
}
if (typeof errorHandler === 'function') {
this.once ('error' ، errorHandler) ؛
}
if (typeof progressHandler === 'function') {
this.on ("العملية" ، ProgressHandler) ؛
}
إرجاع هذا ؛
}
// تحديد كائن التأخير
// يحتوي على حالة وكائن الوعد
var مؤلف = function () {
هذا
this.promise = New Promise () ؛
}
deferred.prototype.Resolve = function (obj) {
this.state = 'الوفاء' ؛
this.promise.emit ("النجاح" ، OBJ) ؛
}
deferred.prototype.reject = function (err) {
this.state = 'فشل' ؛
this.promise.emit ('error' ، err) ؛
}
deferred.prototype.progress = دالة (البيانات) {
this.promise.emit ("العملية" ، البيانات) ؛
}
// استخدم طلب HTTP لاستخدام الوعد/المؤجل المحدد أعلاه
var client = function () {
خيارات var = {
اسم المضيف: 'www.baidu.com' ،
الميناء: 80 ،
طريق:'/'،
الطريقة: "احصل"
} ؛
var مؤلف = new Deferred () ؛
var req = http.request (الخيارات ، الدالة (الدقة) {
Res.SetEncoding ('UTF-8') ؛
var data = '' ؛
res.on ('Data' ، function (chunk) {
البيانات += قطعة ؛
مؤلف. progress (قطعة) ؛
}) ؛
res.on ('end' ، function () {
deferred.Resolve (البيانات) ؛
}) ؛
}) ؛
req.on ('error' ، function (err) {
deferred.reject (err) ؛
})
req.end () ؛
العودة المؤجلة.
}
Client (). ثم (دالة (البيانات) {
console.log ('request الانتهاء' ، البيانات) ؛
} ، وظيفة (خطأ) {
console.log ("خطأ الوصول" ، err) ؛
} ، وظيفة (قطعة) {
console.log ('القراءة' ، قطعة) ؛
}) ؛
احفظ الكود كـ promise.js ، يمكنك تشغيله تحت سطر الأوامر. أدخل Node Promise.js مباشرة لرؤية تأثير الجري.