สมมติว่าสถานการณ์ทางธุรกิจ:
ผ่านที่อยู่ RSS รับ RSS และบันทึกไว้ในไฟล์และที่อยู่ RSS จะถูกบันทึกไว้ในไฟล์
เพื่อให้ธุรกิจเสร็จสมบูรณ์ในสถานการณ์นี้จำเป็นต้องมีงานสามอย่าง:
1. อ่านที่อยู่ RSS จากไฟล์
2. รับ RSS
3. บันทึกในไฟล์
ในที่สุดงานทั้งสามนี้จะรวมเข้าด้วยกัน
เตรียมตัว:
ไฟล์ที่จัดเก็บที่อยู่ RSS ที่อยู่ที่อยู่ txt
http://programmer.csdn.net/rss_programmer.html
ภารกิจที่ 1:
อ่านเนื้อหาของไฟล์ที่อยู่ RSS และส่งคืนผ่านการโทรกลับ
การคัดลอกรหัสมีดังนี้:
var getRsSaddress = function (พา ธ การโทรกลับ) {
fs.readfile (path, {encoding: 'utf8'}, ฟังก์ชัน (err, data) {
การโทรกลับ (err, data);
-
-
ภารกิจที่ 2:
ไปที่ RSS ผ่านที่อยู่ RSS และส่งคืนข้อผิดพลาดหรือข้อมูลผ่านการโทรกลับ
การคัดลอกรหัสมีดังนี้:
var getRss = function (url, callback) {
var data = '';
http.get (url, function (res) {
res.on ('data', function (chrunk) {
ข้อมูล += Chrunk;
-
res.on ('end', function () {
การโทรกลับ (null, data);
-
}). on ('ข้อผิดพลาด', ฟังก์ชัน (err) {
การโทรกลับ (เอ่อ, โมฆะ);
-
-
ภารกิจ 3:
บันทึก RSS ในไฟล์และส่งคืนข้อผิดพลาดผ่านการโทรกลับ
การคัดลอกรหัสมีดังนี้:
var saverss = function (data, callback) {
fs.writefile ('rss.txt', data, 'utf8', ฟังก์ชั่น (err) {
การโทรกลับ (err);
-
-
การรวม:
การคัดลอกรหัสมีดังนี้:
getRsSaddress ('address.txt', ฟังก์ชั่น (err, data) {
ถ้า (err) {
console.log (err);
กลับ;
-
getRss (ข้อมูล, ฟังก์ชั่น (err, data) {
ถ้า (err) {
console.log (err);
กลับ;
-
Saverss (data, function (err) {
ถ้า (err) console.log (err);
-
-
-
รหัสข้างต้นเป็นการประมวลผลแบบอะซิงโครนัสอย่างสมบูรณ์ การโทรกลับที่พบบ่อยที่สุดใช้เพื่อจัดการกับการกลับมาของตรรกะแบบอะซิงโครนัส ข้อได้เปรียบคือวิธีการเขียนมาตรฐานเป็นเรื่องง่ายสำหรับทุกคนที่จะยอมรับ ข้อเสียคือการมีเพศสัมพันธ์นั้นแข็งแกร่งเกินไปการจัดการข้อยกเว้นคือรหัสไม่ได้ใช้งานง่ายโดยเฉพาะอย่างยิ่งเมื่อต้องรับมือกับตรรกะทางธุรกิจที่ซับซ้อนและงานมากมายการเรียกกลับแบบเลเยอร์จะทำให้ผู้คนมองดูพวกเขา
หนึ่งในการใช้งานของคำสัญญา/ข้อกำหนดคือเมื่อ js ซึ่งมุ่งเป้าไปที่โดเมนปัญหาดังกล่าว
ลองดูที่รหัสที่แก้ไข
ภารกิจที่ 1:
การคัดลอกรหัสมีดังนี้:
var getRsSaddress = ฟังก์ชั่น (พา ธ ) {
var referred = เมื่อ. defer ();
fs.readfile (path, {encoding: 'utf8'}, ฟังก์ชัน (err, data) {
ถ้า (err) deverred.reject (err);
deferred.resolve (ข้อมูล);
-
return reterred.promise;
-
ภารกิจที่ 2:
การคัดลอกรหัสมีดังนี้:
var getRss = function (url) {
var referred = เมื่อ. defer ();
var data = '';
http.get (url, function (res) {
res.on ('data', function (chrunk) {
ข้อมูล += Chrunk;
-
res.on ('end', function () {
deferred.resolve (ข้อมูล);
-
}). on ('ข้อผิดพลาด', ฟังก์ชัน (err) {
deferred.reject (err);
-
return reterred.promise;
-
ภารกิจ 3:
การคัดลอกรหัสมีดังนี้:
var saverss = function (data) {
var referred = เมื่อ. defer ();
fs.writefile ('rss.txt', data, 'utf8', ฟังก์ชั่น (err) {
ถ้า (err) deverred.reject (err);
deferred.resolve ();
-
return reterred.promise;
-
การรวม:
การคัดลอกรหัสมีดังนี้:
getRsSaddress ('address.txt')
.then (getrss)
. จากนั้น (saverss)
.Catch (ฟังก์ชั่น (เอ่อ) {
console.log (err);
-
อธิบาย:
โมเดล "รอการตัดบัญชี/สัญญา" ที่กำหนดโดยข้อกำหนด/A Promise/A คือโมเดล "เผยแพร่/สมาชิก" การเผยแพร่เหตุการณ์ผ่านวัตถุรอการตัดบัญชีอาจเป็นเหตุการณ์การแก้ไขที่เสร็จสมบูรณ์หรือเหตุการณ์การปฏิเสธที่ล้มเหลว การสมัครสมาชิกที่เสร็จสมบูรณ์หรือล้มเหลวนั้นทำผ่านวัตถุสัญญา
ในสัญญา/ข้อกำหนด A แต่ละงานมีสามสถานะ: ค่าเริ่มต้น (รอดำเนินการ), ปฏิบัติตาม (ปฏิบัติตาม) และล้มเหลว (ปฏิเสธ)
1. สถานะเริ่มต้นสามารถถ่ายโอนไปยังสถานะความสำเร็จในทิศทางเดียว กระบวนการนี้เรียกว่าการแก้ไขและวิธีการที่เกี่ยวข้องคือการเลื่อนออกไป riSolve (PressureorValue);
2. สถานะเริ่มต้นสามารถถ่ายโอนไปยังสถานะที่ล้มเหลวในทิศทางเดียว กระบวนการนี้เรียกว่าการปฏิเสธและวิธีการที่สอดคล้องกันคือการเลื่อนออกไป (เหตุผล);
3. ในสถานะเริ่มต้นคุณยังสามารถประกาศข้อมูลการดำเนินการงานผ่าน deverred.notify (อัปเดต) เช่นความคืบหน้าการดำเนินการ;
4. การโอนสถานะเป็นครั้งเดียว เมื่องานเปลี่ยนไปจากการเริ่มต้นไปยังสถานะอื่นมันจะเข้าสู่กระบวนการดำเนินการของงานถัดไป
ทำตามรหัสด้านบน
กำหนดวัตถุรอการตัดบัญชีผ่านเมื่อใด
var referred = เมื่อ. defer ();
หลังจากได้รับข้อมูลแบบอะซิงโครนัสสำเร็จแล้วเหตุการณ์ที่เสร็จสมบูรณ์จะถูกเผยแพร่
deferred.resolve (ข้อมูล);
หลังจากการเก็บข้อมูลแบบอะซิงโครนัสล้มเหลวเหตุการณ์ที่ล้มเหลวจะถูกเผยแพร่
deferred.reject (err);
และส่งคืนวัตถุสัญญาเป็นการสมัครสมาชิก
return reterred.promise;
การสมัครสมาชิกคือการสมัครสมาชิกที่เสร็จสมบูรณ์/ล้มเหลว/ได้รับการแจ้งเตือนผ่านวิธีการของวัตถุสัญญา
getRsSaddress ('address.txt')
.then (getrss)
จากนั้นมีพารามิเตอร์สามตัวคือ onfulfilled, onrejected และ onprogress
สัญญาแล้ว (onfulfilled, onrejected, onprogress)
งานก่อนหน้านี้คือการแก้ไข (ข้อมูล) และฟังก์ชั่น onfulfilled จะถูกเรียกใช้และข้อมูลจะถูกใช้เป็นพารามิเตอร์
หากงานก่อนหน้านี้ถูกปฏิเสธ (เหตุผล) ดังนั้น onrejected จะถูกเรียกใช้และจะได้รับเหตุผล
เมื่อใดก็ตามที่มีเพียงหนึ่งใน onfulfilled และ onrejected เท่านั้นที่สามารถเรียกใช้และเพียงครั้งเดียว
สำหรับการจัดการข้อยกเว้นเมื่อ js ยังมีวิธีการที่สะดวกมาก จากนั้นสามารถผ่านข้อผิดพลาดได้ เมื่อมีการดำเนินการหลายงานอย่างต่อเนื่องเราสามารถกำหนด onrejected ได้ในตอนนั้นเท่านั้น นอกจากนี้คุณยังสามารถเรียกใช้ฟังก์ชั่นการจับหลังจากล่าสุดเพื่อจับข้อยกเว้นงานใด ๆ
นี่เป็นวิธีที่ง่ายและชัดเจนในการเขียน
การคัดลอกรหัสมีดังนี้:
getRsSaddress ('address.txt')
.then (getrss)
. จากนั้น (saverss)
.Catch (ฟังก์ชั่น (เอ่อ) {
console.log (err);
-
สัญญานำความสะดวกสบายที่ดีมาสู่การเขียนโปรแกรมแบบอะซิงโครนัสทำให้เราสามารถมุ่งเน้นไปที่การดำเนินงานเดียวโดยไม่ตกอยู่ในความโชคร้ายพีระมิด รหัสด้านบนเป็นเพียงการใช้งานพื้นฐานเท่านั้น เมื่อใดที่ JS ให้มากกว่าฟังก์ชั่นที่กล่าวถึงในบทความนี้โปรดดูรายละเอียด API อย่างเป็นทางการ