NIUCLOUD是一款SaaS管理后台框架多应用插件+云编译。上千名开发者、服务商正在积极拥抱开发者生态。欢迎开发者们免费入驻。一起助力发展! 广告
# 第一种 ``` const fs = require('fs') const path = require('path') function getFileByPath(fpath) { return promise = new Promise(function (resolve, reject) { fs.readFile(path.join(__dirname, fpath), 'utf-8', (err, data) => { if (err) return reject(err); resolve(data); }); }); } //如果前面的Promise执行失败,我们不想让后续的Promise操作被终止,可以为每个Promise指定失败的回调 getFileByPath('./1.txt') .then(function (data) { console.log(data); return getFileByPath('./2.txt'); }, function (error) { //return 一个新的Promise,让后续的可以继续执行 console.log('文件1失败:' + error.message) return getFileByPath('./2.txt'); }).then(function (data) { console.log(data); return getFileByPath('./3.txt'); }, function (error) { console.log('文件2失败:' + error.message) return getFileByPath('./3.txt'); }).then(function (data) { console.log(data) }, function (error) { console.log('文件3失败:' + error.message) }).catch(function (error) { console.log(error.message); }) console.log('ok') ``` 结果 ``` ok //因为promise是异步操作 111 222 333 ``` 哪怕前面的promise执行失败了,但是不要影响后序的promise的正常执行,此时,我们可以单独为每个promise通过.then指定一下失败的回调. # 第二种 有时候我们有这样的需求,和上面的需求刚好相反,如果后序的promise执行依赖于前面的promise执行的结果,如果前面的失败了,则后面的就没有继续执行下去的意义了,此时,我们想要实现,一旦有报错,则离职终止所有promise的执行. ``` const fs = require('fs') const path = require('path') function getFileByPath(fpath) { return promise = new Promise(function (resolve, reject) { fs.readFile(path.join(__dirname, fpath), 'utf-8', (err, data) => { if (err) return reject(err); resolve(data); }); }); } //如果前面的Promise执行失败,我们不想让后续的Promise操作被终止,可以为每个Promise指定失败的回调 getFileByPath('./1.txt') .then(function (data) { console.log(data); return getFileByPath('./12.txt'); }) .then(function (data) { console.log(data); return getFileByPath('./3.txt'); }) .then(function (data) { console.log(data) }) .catch(function (error) { //catch的作用:如果前面有任何的promise执行失败,则立即终止所有的promise的执行,并马上进行catch去处理promise中抛出的异常 console.log(error.message); }) console.log('ok') ```