回调嵌套很多时,代码就会非常繁琐,会给我们的编程带来很多的麻烦,这种情况俗称——回调地狱。

var sayhello = function(name, callback) {

setTimeout(function() {

console.log(name);

callback();

},1000);

}

sayhello("first", function() {

sayhello("second", function() {

sayhello("third", function() {

console.log("end");

});

});

});//输出: first second third end

promise是用来解决两个问题的:

回调地狱,代码难以维护, 常常第一个的函数的输出是第二个函数的输入这种现象

promise可以支持多个并发的请求,获取并发请求中的数据

这个promise可以解决异步的问题,本身不能说promise是异步的

二、es6 promise用法大全

Promise是一个构造函数,自己身上有 all, reject, resolve 这几个眼熟的方法,原型上有 then, catch 等方法。

let p = new Promise((resolve, reject) => {

//做一些异步操作

setTimeout(() => {

console.log('执行完成');

resolve('我是成功!!');

}, 2000);

});

Promise的构造函数接收一个参数:函数,并且这个函数需要传入两个参数:resolve :异步操作执行成功后的回调函数

reject:异步操作执行失败后的回调函数

then 链式操作的用法

所以,从表面上看,Promise只是能够简化层层回调的写法,而实质上,Promise的精髓是“状态”,用维护状态、传递状态的方式来使得回调函数能够及时调用,它比传递callback函数要简单、灵活的多。所以使用Promise的正确场景是这样的:

p.then( (data) => {

console.log(data);

})

.then( (data) => {

console.log(data);

})

.then( (data) => {

console.log(data);

});

reject的用法 :

把Promise的状态置为rejected,这样我们在then中就能捕捉到,然后执行“失败”情况的回调。看下面的代码。

let p = new Promise((resolve, reject) => {

//做一些异步操作

setTimeout(function(){

var num = Math.ceil(Math.random()*10); //生成1-10的随机数

if(num<=5){

resolve(num);

}

else{

reject('数字太大了');

}

}, 2000);

});

p.then((data) => {

console.log('resolved',data);

},(err) => {

console.log('rejected',err);

}

);

then中传了两个参数,then方法可以接受两个参数,第一个对应resolve的回调,第二个对应reject的回调。

所以我们能够分别拿到他们传过来的数据。多次运行这段代码,你会随机得到下面两种结果:

或者

catch的用法

我们知道Promise对象除了then方法,还有一个catch方法,它是做什么用的呢?

其实它和then的第二个参数一样,用来指定reject的回调。用法是这样:

p.then( (data) => {

console.log('resolved' , data)

}). catch( (err) => {

console.log('rejected' , err)

})

效果和写在then的第二个参数里面一样,不过它还有第二个作用: 在执行resolve的回调(也就是上面then中的第一个参数)时,如果抛出异常(代码出错了),那么并不会报错卡死js,而是会进入到这个catch方法中。

p.then( (data) => {

console.log('resolved', data);

console.log(somedata);//此处的somedata的定义

})

.catch( (err) => {

console.log('rejected', err)

})

在resolve的回调中,我们console.log(somedata);而somedata这个变量是没有被定义的。如果我们不用Promise,代码运行到这里就直接在控制台报错了,不往下运行了。但是在这里,会得到这样的结果:

也就是说进到catch方法里面去了,而且把错误原因传到了reason参数中。即便是有错误的代码也不会报错了,这与我们的try/catch语句有相同的功能

all的用法:谁跑的慢,以谁为准执行回调。

all接收一个数组参数,里面的值最终都算返回Promise对象

Promise的all方法提供了并行执行异步操作的能力,并且在所有异步操作执行完成才执行回调。

看下面的例子:

let Promise1 = new Promise( function(resolve, reject) { });

let Promise2 = new Promise( function(resolve, reject) { });

let Promise3 = new Promise( function(resolve, reject) { });

let p = Promise.all( [Promise1, Promise2, Promise3] )

p.then(function() {

//三个都成功则成功

},{

//只要有失败,则失败

})

race的用法:谁跑的快,以谁为准执行回调

race的使用场景:比如我们可以用race给某个异步请求设置超时时间,并且在超时后执行相应的操作,代码如下:

//请求某个图片资源

function requestImg(){

var p = new Promise( (resolve, reject) => {

img.onload = function(){

resolve(img);

}

img.src = '图片的路径';

});

return p;

}

//延时函数,用于给请求计时

function timeout() {

var p = new Promise( (resolve, reject) => {

setTimeout( () => {

reject('图片请求超时');

},5000)

});

return p;

}

Promise.race([requestImg(), timeout()].then( (data) =>{

console.log(data);

}).catch( (err) => {

console.log(err);

})

)

mysql回调地狱_es6 promise 所见相关推荐

  1. 【JavaScript】回调地狱、Promise

    文章目录 1. 回调函数 2. 异步任务 3. 回调地狱 4. Promise 4.1 Promise定义 4.2 Promise基础用法 4.2.1 生成Promise实例 4.2.2 Promis ...

  2. 详解回调地狱以及promise

    1.什么是回调地狱? 说promise之前必须先简单说下,回调地狱 回调地狱:在回调函数中又嵌套了多层回调函数,便会形成回调地狱 JS中或node中,都大量的使用了回调函数进行异步操作,而异步操作什么 ...

  3. ES6(三)——回调地狱和promise异步任务顺序执行(传参、错误处理)

    文章目录 方法一.回调函数(回调地狱) 方法二:promise 2.1异步任务传参(单个) 2.2异步任务传参(多个) 2.3 错误处理 2.4 Promiss对象三大状态: (学名) 2.5 Pro ...

  4. 回调地狱终结者——Promise

    在Web前端开发中,我们使用JavaScript会大量依赖异步计算.比如说,Ajax请求时,我们可能会需要不只一个请求来达到某种目的,此时需要后面的请求依赖于前面请求的结果.这种情况在简单的业务中并无 ...

  5. 回调地狱和Promise

    目录 1.回调地狱callback-hell 由于fs.readFile是异步操作,所以你不能判断下面三个文件的执行顺序 var fs = require('fs')fs.readFile('./da ...

  6. mysql回调地狱_浅谈JS回调地狱

    前言: 回调地狱称之为callback hell 主体: (1)分析 由图分析可知,内部的异步请求依赖于上一个内部请求的结果 (2)编写案例 本节内容主要涉及 异步编程 1.简单回调案例 2.node ...

  7. 回调地狱与promise

    <script src="js/ajax.js"></script><script>// function fn(a){// a()// }// ...

  8. mysql回调地狱_5、Express异步读取Mysql数据库 callback/promise/async

    一.Node异步 Node.js 异步编程的直接体现就是回调. 有了异步方法,我们可以一边操作数据库,一边执行其他命令,在数据库操作完成后,我们将查询数据作为回调函数的参数返回.这样在执行代码时就没有 ...

  9. 什么是回调地狱以及promise的链式调用和aysnc/await

    上面一篇博客写到了回调地域的问题,这篇博客将深究这个词语,如下例: doSomething(function(result){doSomethingElse(result, function(newR ...

  10. 【Callback Hell】一文让你轻松了解何为回调地狱?

    回调地狱[Callback Hell] 前提知识点: 单线程和异步: JS是单线程语言,只能同时做一件事儿 (例子:做一个ajax请求去加载资源,或者说弄一个定时器,先等待1秒钟后干嘛,如果按照单线程 ...

最新文章

  1. 交换机使用QoS来对端口限速
  2. C# List Sort
  3. Java并发编程的基础-Thread.interrupted
  4. Window7+vs2008+QT环境搭建
  5. Halcon—Tuple中符号的含义
  6. 产品总监如何做产品规划?
  7. Android 入门篇(一)环境搭建
  8. java和C#的相同之处笔记
  9. uni-app android权限
  10. UEFI开发之应用开发
  11. Android数据库框架Sugar的使用
  12. 解析中小学生的 AI 思维学习模型
  13. Invalid format specifier的解决方法
  14. FreeBie—免费设计师专用素材网
  15. 受伤的皇后(八皇后问题)
  16. 傲气雄鹰android 3dm,傲气雄鹰 重载
  17. java:去除数组重复元素的四种方法
  18. Leecode-SQL 1407. 排名靠前的旅行者
  19. Very Good!!! - React 入门实例教程
  20. Server2012R2下安装intel 82579v网卡驱动

热门文章

  1. Ubuntu16.04安装(QQ.exe)
  2. 行泊ADAS摄像头前装搭载同比增长54.15%,TOP10供应商领跑
  3. 抖音python上的代码_抖音代码舞「图文推荐」,python实例代码
  4. 推荐系统实践---第一章:好的推荐系统
  5. 通达2017OA数据字典
  6. cmd代码表白_python表白神器你值得拥有
  7. 趣谈网络协议(二)传输层
  8. 铁路售票系统_铁路这些工种你知道吗?快来一起康康吧
  9. 思科简单教程CCNA
  10. (附源码)计算机毕业设计SSM基于java语言的在线电子书阅读系统