问题:
当有多个回调函数后,就无法保证其输出的顺序性了,而采用嵌套的方式虽可以解决这个问题,但是代码样式太丑,且很乱,Promise的出现就是为了解决这个问题

多个回调函数

 var  fs = require('fs');fs.readFile('./files/1.txt','utf8',function(err,data){if(err){throw err;}console.log(data);})fs.readFile('./files/2.txt','utf8',function(err,data){if(err){throw err;}console.log(data);})fs.readFile('./files/3.txt','utf8',function(err,data){if(err){throw err;}console.log(data);})

嵌套

fs.readFile('./files/1.txt','utf8',function(err,data){if(err){throw err;}console.log(data);//读取第二个异步任务fs.readFile('./files/2.txt','utf8',function(err,data){console.log(data);//读取第三个异步任务fs.readFile('./files/3.txt','utf8',function(err,data){console.log(data);})})
})

起步

在 new Promise()容器放入回调函数

//语法:new Promise(function(callback){})
var  fs = require('fs');
var promise = new Promise(function(resolve,reject){//两个参数 resolve 异步执行成功的回调函数,reject异步执行失败的回调函数fs.readFile('./files/1.txt', 'utf8', function (err, data) {if (err) {throw err;}console.log(data);})
});

基本使用

在 new Promise()容器放入回调函数后,通过resolve将参数里的值带出来
then里面的参数data就是resolve()括号里的值
(简化起见,不写err)

var fs = require('fs');
var promise = new Promise(function (resolve) {fs.readFile('./files/1.txt', 'utf8', function (err, data) {resolve(data);})
});promise.then(function (data) {console.log('成功:' + data);
});

封装

一层封装

var fs = require('fs');function getFile(path){return new Promise(function (resolve) {fs.readFile(path, 'utf8', function (err, data) {resolve(data);})
});
}getFile('./files/1.txt').then(function (data) {console.log('成功:' + data)
})

对于代码重复的回调函数可以链式使用.then封装,如下

var fs = require('fs');function getFile(path){return new Promise(function (resolve) {fs.readFile(path, 'utf8', function (err, data) {resolve(data);})
});
}getFile('./files/1.txt')
.then(function (data) {console.log('====>' + data)return getFile('./files/2.txt')
})
.then(function(data){console.log('====>' + data)return getFile('./files/3.txt')
})
.then(function(data){console.log('====>' + data)
})

执行多次异步操作

var promise1 = getFileByPath('./files/1.txt');
var promise2 = getFileByPath('./files/2.txt');
var promise3 = getFileByPath('./files/3.txt');Promise.all([promise3,promise1,promise2]).then(function(data){console.log(data);
},function(err){console.log(err);
})

Promise解决异步操作问题相关推荐

  1. promise对象-代替回调函解决异步操作

    问题: 服务器中有3个文件a.txt.b.txt.c.txt分别存储的数据为1.2.3,通过js中的异步ajax,分别获取这3个文件的内容并求和输出6. 问题答案方法一(回调函数方法):(对应下面的: ...

  2. Promise解决多个异步Ajax请求导致的代码嵌套问题(完美解决方案)

    这篇文章主要介绍了用Promise解决多个异步Ajax请求导致的代码嵌套问题(完美解决方案),需要的朋友可以参考下 问题 前端小同学在做页面的时候,犯了个常见的错误:把多个Ajax请求顺序着写下来了, ...

  3. Promise(解决回调地狱)

    Promise() 对象: 存在三种状态: //进行时 pending// 成功 resolve//失败 reject 执行语句: let promise= new Promise((resolve, ...

  4. promise解决回调地狱(callback hell)

    promise解决回调地狱(callback hell) 具体参考 阮一峰,ES6标准入门 在我们需要对一个异步操作进行频繁的调用的时候,且要保证一步操作的顺序,可能会出现 回调地狱(callback ...

  5. Promise处理异步操作

    Promise对象 Promise 对象用于表示一个异步操作的最终完成 (或失败), 及其结果值. 我的理解:Promise使得异步的写法不像之前那样一直回调,而可以用同步的代码书写格式去写异步代码. ...

  6. Promise 解决同步请求问题

    Promise 解决同步请求问题 参考文章: (1)Promise 解决同步请求问题 (2)https://www.cnblogs.com/lvxisha/p/12035709.html 备忘一下.

  7. Promise的基础使用与生成器配合Promise解决回调地狱

    经过几天对Promise的了解,希望可以帮助到大家. 什么是回调地狱         说起回调地狱 首先想到的是异步 在js中我们经常会大量使用异步回调,常用的ajxa请求 来看下面这段代码: fun ...

  8. 使用Promise解决请求先后次序问题

    Situation 需求:点击事件实现快速新增一篇文章 最开始的方案是根据文章uid去查找model中存的list数据,再发送一个新增请求即可实现. 但是list中没有存文章的content,此时就不 ...

  9. node js Bluebird 简单介绍 promise 解决回调地狱

    Promise是异步代码实现控制流的一种方式.这一方式可以让你的代码干净.可读并且健壮. 异步回调如下: fs.readFile('directory/file-to-read', function( ...

最新文章

  1. Python天天美味(35) - 细品lambda
  2. worpress安装mysql连不上_wordpress安装时连接不上MySQL8.0(已解决)Windows
  3. access下的分页方案(仿sql存储过程)
  4. static 关键字静态导包
  5. MFC命令行及CCommandLineInfo类
  6. Keil C51,内存与指针
  7. Redmi K50标准版工信部入网:搭载骁龙870 没有12GB内存
  8. 虚拟化系列-Citrix XenServer 6.1 网络管理
  9. Java集合源码分析(二):哈希表
  10. 老男孩linux运维50期-谢江平
  11. 大数据技术笔记之数据采集和预处理
  12. PS套索工具抠图及快捷键
  13. 8、共射放大电路一般性质与放大电路的直流偏移
  14. Linux硬盘文件系统损坏,Linux常见的文件系统类故障该怎么解决-文件系统错误
  15. Android Material 常用组件详解(七)—— BottomNavigationView 使用详解
  16. DWG中注记类型属性转换
  17. css中@media写法在ie 、firefox、Opera、Chrome、Safari 浏览器中的支持
  18. CentOs7下载与安装
  19. iOS面试备战-网络篇
  20. oracle避免回表,请教大家: 经常在sql调优过程中提到避免“回表”,具体是指什么意思???3Q...

热门文章

  1. 《C++ Primer》7.5.2节练习
  2. 非递归遍历二叉树(算法导论第三版第十章10.4-5)
  3. linux关机方法有哪些?有何区别_Linux下判断是否正常关机的一个简单方法
  4. java程序员选择多个offer时需要看重哪些?_对不起,我们公司不要本科以下的大学生,学历对于程序员重不重要...
  5. Python--第4次平时作业
  6. 插入排序 希尔排序 C++
  7. solverstate的使用
  8. 【TC10738】TheContest【Hall 定理】【贪心】【二分图匹配】
  9. 牛客网【每日一题】5月15日题目 储物点的距离
  10. 基站建设(三元环计数+根号分治 / bitset)