标签:一个 turn i++ col 两种 adf reject dirname require
Promise 有三种状态,进行中(pending),已成功(fulfilled),已失败(rejected);
一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise
对象的状态改变,只有两种可能:从pending
变为fulfilled
和从pending
变为rejected
。只要这两种情况发生,状态就凝固了,不会再变了,会一直保持这个结果,这时就称为 resolved(已定型)。如果改变已经发生了,你再对Promise
对象添加回调函数,也会立即得到这个结果。这与事件(Event)完全不同,事件的特点是,如果你错过了它,再去监听,是得不到结果的。
Promise 对象的错误具有“冒泡”性质,会一直向后传递,直到被捕获为止。也就是说,错误总是会被下一个catch
语句捕获。
所以可以先实例化一个Promise对象,然后在使用 then 方法为Promise对象添加成功或错误的回调函数,但一般只会添加成功的回调函数。然后用catch捕获错误执行错误的回调函数
1 const fs = require("fs"); 2 const path = require("path"); 3 4 function readFile (url){ 5 return new Promise((resolv,reject) => { 6 fs.readFile(path.join(__dirname,url),"utf8",(err,data) => { 7 if(err) return reject(err); 8 resolv(data); 9 }) 10 }) 11 } 12 13 readFile("1.txt").then((data) => { 14 console.log(data+"\n第1个文件"); 15 return readFile("2.txt"); 16 }).then((data) => { 17 console.log(data+"\n第2个文件"); 18 return readFile("3.txt"); 19 }).then( data => { 20 console.log(data+"\n第3个文件"); 21 }).catch( err => { 22 console.log(err.message); 23 })
使用递归实现
1 const fs = require("fs"); 2 const path = require("path"); 3 (function () { 4 let that = null; 5 function ReadFile(arr) { 6 this.i = 0; 7 this.len = arr.length; 8 this.arr = arr; 9 that = this; 10 } 11 12 function readFileArrThen(data) { 13 console.log(`读取第${that.i}个文件:${data}`); 14 that.i++; 15 if (that.i < that.len) { 16 that.readStart(); 17 } 18 } 19 20 function readFileArrCath(err) { 21 console.log(err.message); 22 that.i++; 23 if (that.i < that.len) { 24 that.readStart(); 25 } 26 } 27 28 ReadFile.prototype.readFileArr = function() { 29 return new Promise((resolve, reject) => { 30 fs.readFile(path.join(__dirname, that.arr[that.i]), "utf8", (err, data) => { 31 if (err) return reject(err); 32 resolve(data); 33 }) 34 }) 35 } 36 37 ReadFile.prototype.readStart = function () { 38 that.readFileArr().then(readFileArrThen).catch(readFileArrCath); 39 } 40 41 module.exports.ReadFile = ReadFile; 42 })()
标签:一个 turn i++ col 两种 adf reject dirname require
原文地址:https://www.cnblogs.com/csdcs/p/10367015.html