สัญญา/รอการตัดบัญชีเป็นข้อกำหนดที่ดีสำหรับการจัดการการเข้ารหัสการโทรแบบอะซิงโครนัส ต่อไปนี้ใช้รหัส NodeJS เป็นคลาสเพื่อใช้การใช้งาน Promise/A อย่างง่าย
การคัดลอกรหัสมีดังนี้:
-
* สร้างขึ้นด้วย jetbrains webstorm
* ผู้ใช้: xuwenmin
* วันที่: 14-4-1
* เวลา: 9:54 น
* หากต้องการเปลี่ยนเทมเพลตนี้ใช้ไฟล์ | การตั้งค่า เทมเพลตไฟล์
-
var eventemitter = ต้องการ ('เหตุการณ์') Eventemitter;
var http = ต้องการ ('http');
var util = ต้องการ ('util');
// กำหนดวัตถุสัญญา
var promition = 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 ('ข้อผิดพลาด', ErrorHandler);
-
if (typeof progresshandler === 'function') {
this.on ('กระบวนการ', progresshandler);
-
คืนสิ่งนี้;
-
// กำหนดวัตถุล่าช้า
// มีสถานะและวัตถุสัญญา
var deferred = function () {
this.state = 'ไม่ได้ผล';
this.promise = ใหม่สัญญา ();
-
deferred.prototype.resolve = function (obj) {
this.state = 'เติมเต็ม';
this.promise.emit ('ความสำเร็จ', obj);
-
deferred.prototype.reject = function (err) {
this.state = 'ล้มเหลว';
this.promise.emit ('ข้อผิดพลาด', err);
-
deferred.prototype.progress = function (data) {
this.promise.emit ('กระบวนการ', ข้อมูล);
-
// ใช้คำขอ HTTP เพื่อใช้สัญญา/รอการตัดบัญชีที่กำหนดไว้ข้างต้น
var client = function () {
ตัวเลือก var = {
ชื่อโฮสต์: 'www.baidu.com'
พอร์ต: 80,
เส้นทาง:'/',
วิธี: 'รับ'
-
var referred = new รอการตัดบัญชี ();
var req = http.request (ตัวเลือก, ฟังก์ชัน (res) {
Res.setEncoding ('UTF-8');
var data = '';
res.on ('data', ฟังก์ชั่น (ก้อน) {
ข้อมูล += ก้อน;
รอการตัดบัญชี (ก้อน);
-
res.on ('end', function () {
deferred.resolve (ข้อมูล);
-
-
req.on ('ข้อผิดพลาด', ฟังก์ชั่น (err) {
deferred.reject (err);
-
req.end ();
return reterred.promise;
-
ไคลเอนต์ (). จากนั้น (ฟังก์ชั่น (ข้อมูล) {
console.log ('ขอเสร็จสิ้น', ข้อมูล);
}, ฟังก์ชัน (err) {
console.log ('การเข้าถึงข้อผิดพลาด', err);
}, ฟังก์ชั่น (ก้อน) {
console.log ('การอ่าน', ก้อน);
-
บันทึกรหัสเป็น Promise.js คุณสามารถเรียกใช้ภายใต้บรรทัดคำสั่ง ป้อนโหนด Promise.js โดยตรงเพื่อดูเอฟเฟกต์การทำงาน