zoukankan      html  css  js  c++  java
  • Promise

    概念

    • Promise 是一个构造函数,既然是构造函数,那么我们就可以通过 new Promise() 得到一个 Promise 实例

    • 在 Promise 上,有两个函数,分别叫做 resolve(成功之后的回调函数) 和 reject(失败之后的回调函数)

    • Promise 表示一个异步操作,当我们 new Promise 实例,这个实例就表示一个具体的异步操作

    • 既然 Promise 创建的实例是一个异步操作,那么这个异步操作的结果,只能有两种状态

      • 状态1:异步执行成功了,需要在内部调用成功的回调函数 resolve ,把结果返回给调用者
      • 状态2:异步执行失败了,需要在内部调用失败的回调函数 reject 把结果返回给调用者
      • 由于 Promise 实例是一个异步操作,所以内部拿到操作的结果后,无法使用 return 把操作结果返回给调用者;这时候,只能使用回调函数的形式,来把成功或失败的结果,返回给调用者
    • 我们可以在 new 出来的 Promise 实例上调用 .then() 方法,预先为这个 Promise 异步操作,指定成功和失败的回调函数

    使用

    var promise = new Promise()
    //这里 new 出来的 Promise 只是代表形式上的一个异步操作(我们知道它是一个异步操作,但具体做什么异步事情,目前还不清楚)
    
    //这是一个具体的异步操作,其中使用 function 指定一个具体的异步操作,每当
    // new 一个 Promise 对象的时候,就立即执行这个异步操作中的代码可以用函数封装这个对象,需要的时候才调用
    const fs = require('fs')
    var promise = new Promise(function(){
        fs.readFile('./1.txt','utf-8',(err,datastr) => {
            if(err) throw err
            console.log(datastr)
        })
    })
    

    可以将这个异步操作封装到函数中,再将这个 Promise 实例返回出去

    function getFileByPath(fpath){
        return new Promise(function (resolve,reject) {
            fs.readFile(fpath, 'utf-8', (err,dataStr) => {
                if(err) return reject(err)
                resolve(dataStr)
            })
        })
        // return promise
    }
    

    解决回调地狱问题,在上一个.then()中,返回一个新的 promise 实例,可以继续用下一个 .then() 来处理

    getFileByPath('./11.txt').then(function(data){
        console.log(data)
        return getFileByPath('./2.txt')
    },function (err) {
        console.log(err.message)
        return getFileByPath('./2.txt')
    }).then(function (data) {
        console.log(data)
        return getFileByPath('./3.txt')
    }).then(function(data){
        console.log(data)
    })
    
  • 相关阅读:
    min-width和width的区别
    组装电脑
    css背景透明,文字不透明
    三十九、前端基础之HTML
    三十八、事务、mysql索引,视图
    三十七、python操作mysql,和navicat
    三十六、单表与多表查询
    三十五、表与表之间的关系
    三十四、字段类型
    三十三、初识数据库及简单命令
  • 原文地址:https://www.cnblogs.com/angle-yan/p/12777227.html
Copyright © 2011-2022 走看看