为什么要有promise:解决(回调地狱)的问题

### 回调地狱:

```js //跟以前的if条件地狱很像

// if(){ // if(){ // if(){ // } // } //}

$.get("/getUser",function(res){

  $.get("/getUserDetail",function(){

     $.get("/getCart",function(){

       $.get("/getBooks",function(){ //...

       })

     })

   })

})

//node开发:读取文件;开个服务器、接收一个请求、请求路径、访问数据库 ```

### Promise函数基本用法
```js
var promise=new Promise((resolve,reject)=>{
  //b 把需要执行的异步操作放在这里
  $.get("/getUser",res=>{
    //获取数据的异步操作已经执行完毕了,等待下一步的执行,通过执行resolve函数,告诉外界你可以执行下一步操作了
    //c、

    resolve(res) //只是一个标记
    //而执行的下一步操作,其实就是写在then的回调函数中的
  })
})

//a、
promise.then(res=>{
  //d、执行后续的操作
  console.log(res);
})
```

    //把异步操作封装在一个promise对象中
function fn(){
return new Promise((resolve,reject)=>{
setTimeout(()=>{
console.log('你好'); //其实异步逻辑到这里其实已经执行完毕了,
//就可以告诉外界,可以执行其他操作了
//如何告诉外界,让外界得知?
resolve();
},1000);
})
}
//调用了这个函数,执行了异步操作
//fn()
//存在问题,并不知道这个异步操作什么时候结束
fn().then(res=>{
//执行到下一步
console.log("下一步"); fn().then(res=>{
console.log("执行第二步");
})
}) //输出顺序:
//你好
//下一步
//你好
//执行第二步
 function f1(){
return new Promise(resolve=>{
setTimeout(()=>{
console.log('第一步'); //异步逻辑已经执行完,必须要告诉外界我执行完了
resolve(); },1000)
})
}
function f2(){
return new Promise(resolve=>{
setTimeout(()=>{
console.log('第二步'); //告诉外界我执行完了
resolve();
},1000)
})
} f1().then(res=>{
//返回一个promise对象,然后链式调用then方法
return f2();
}).then(res=>{
return f1();
}).then(res=>{
return f2();
}).then(res=>{
setTimeout(()=>{
console.log('完成');
},1000)
})

Promise如何解决回调地狱的更多相关文章

  1. ES6(promise)_解决回调地狱初体验

    一.前言 通过这个例子对promise解决回调地狱问题有一个初步理解. 二.主要内容 1.回调地狱:如下图所示,一个回调函数里面嵌套一个回调函数,这样的代码可读性较低也比较恶心 2.下面用一个简单的例 ...

  2. promise对象解决回调地狱

    先放一张图片感受一下回调地狱 看起来是真的很让人头痛的东西 而现在我这里使用promise对象来解决回调地狱 采用链式的 then,可以指定一组按照次序调用的回调函数. 这时,前一个 then 里的一 ...

  3. 【JavaScript】 使用Async 和 Promise 完美解决回调地狱

    很久以前就学习过Async和Promise,但总是一知半解的. 今天在写NodeJS的时候,发现好多第三方库使用回调,这样在实际操作中会出现多重回调,这就是传说中的JS回调地狱. 举个例子 有一个方法 ...

  4. 使用ES6的Promise完美解决回调地狱

    相信经常使用ajax的前端小伙伴,都会遇到这样的困境:一个接口的参数会需要使用另一个接口获取. 年轻的前端可能会用同步去解决(笑~),因为我也这么干过,但是极度影响性能和用户体验. 正常的前端会把接口 ...

  5. 回调地狱以及用promise怎么解决回调地狱

    哈哈哈,我又又又回来了,不好意思,最近枸杞喝的比较到位,精力比较旺盛. 现在我们来聊一聊啥是回调地狱,注意是回调地狱啊   不是RB人民最爱拍的那啥地狱啊,来吧,上车吧少年,这是去幼儿园的车 都让开, ...

  6. async + promise 解决回调地狱

    // 解决异步回调地狱的方案: async + promise async function writeFile() {   // 打开文件   const fd = await new Promis ...

  7. 基于PROMISE解决回调地狱问题

    回调地狱问题: 在使用JavaScript时,为了实现某些逻辑经常会写出层层嵌套的回调函数,如果嵌套过多,会极大影响代码可读性和逻辑,这种情况也被成为回调地狱.比如说你要把一个函数 A 作为回调函数, ...

  8. Promise解决回调地狱(多层调用问题)

    Promise # Promise 是异步编程的一种解决方案:从语法上讲,promise是一个对象,从它可以获取异步操作的消息:从本意上讲,它是承诺,承诺它过一段时间会给你一个结果.promise有三 ...

  9. Promise,async/await解决回调地狱

    先说一下async的用法,它作为一个关键字放到函数前面,用于表示函数是一个异步函数,因为async就是异步的意思, 异步函数也就意味着该函数的执行不会阻塞后面代码的执行. 写一个async 函数 as ...

随机推荐

  1. 【转载】【笔记】vue-router之路由传递参数

    参考博客地址:https://blog.51cto.com/4547985/2390799 1.通过<router-link> 标签中的to传参 基本语法: <router-link ...

  2. JMeter系列教程

    认识JMeter工具 JMeter常用元件功能介绍 JMeter线程组 JMeter脚本三种录制方法 Jmeter组件介绍及其作用域和执行顺序 JMeter参数化 JMeter集合点 JMeter关联 ...

  3. java之集合工具类Collections

    Collections类简介 java.utils.Collections 是集合工具类,用来对集合进行操作.此类完全由在 collection 上进行操作或返回 collection 的静态方法组成 ...

  4. TopCoder12727 「SRM590Hard」FoxAndCity 最小割离散变量模型

    问题描述 一张 \(N\) 个点无向图,边权都为 \(1\) ,添加若干条边,最小化 \(\sum\limits_{1 \le i \le n,i \in N_{+}}{(a_i-b_i)^2}\). ...

  5. 高阶函数&&高阶组件(二)

    高阶组件总共分为两大类 代理方式 操纵prop 访问ref(不推荐) 抽取状态 包装组件 继承方式 操纵生命周期 操纵prop 代理方式之 操纵prop 删除prop import React fro ...

  6. Linux 部署MySQL 一主一从一备

    主服务器搭建 准备三台服务器,一主一从一备 在主服务器(master)下找到mysql配置文件. Window下为my.ini(一般在C:\ProgramData\MySQL\MySQL Server ...

  7. 在eclipse中添加jdk源码

    window->Preferences->java->Installed JREs 点击你的jre然后点右边的Edit 找到以rt.jar结尾的jar,点击右边的Source Att ...

  8. python爬虫爬小说网站涉及到(js加密,CSS加密)

    我是对于xxxx小说网进行爬取只讲思路不展示代码请见谅 一.涉及到的反爬 js加密 css加密 请求头中的User-Agent以及 cookie 二.思路 1.对于js加密 对于有js加密信息,我们一 ...

  9. Java工程师学习指南

    java学习指南-四个部分:分别是入门篇,初级篇,中级篇,高级篇 第一步是打好Java基础,掌握Java核心技术,                                            ...

  10. Python Web(二)

    Infi-chu: http://www.cnblogs.com/Infi-chu/ 一.Django-debug-toolbar django-debug-toolbar 是一组可配置的面板,可显示 ...