溺水墨斗鱼 2021-08-27 10:22 采纳率: 54.5%
浏览 25
已结题

为什么then方法中的实参,能传进function(resolve,reject)中?代码执行是一个什么样的顺序或流程?


import fs from 'fs';

function getFile(fpath){
    
    return new Promise(function(resolve,reject){
        
        fs.readFile(fpath,'utf8',(err,dataStr)=>{//指定回调函数,第一个参数是错误信息,二参是成功之后的结果
            if(err) return reject(err);//return是为了终止下面代码执行
            resolve(dataStr);
        })
    });
}

//调用这个方法,返回的promise对象,then方法用来预先指定成功和失败的回调函数
getFile('./files/11.txt').then((r1)=>{console.log(r1)},(err)=>{console.log(err.message)});
//另一种打印错误的写法
getFile('./files/11.txt').then((r1)=>{console.log(r1)}).catch(err=>{console.log(err.message)});
  • 写回答

4条回答 默认 最新

  • 一把编程的菜刀 2021-08-27 10:48
    关注

    你这个可以拆解成下面这样去理解

    import fs from 'fs';
    const fpath='./files/11.txt';
    const getFile= new Promise(function(resolve, reject) {
              fs.readFile(fpath,'utf8',(err,dataStr)=>{//指定回调函数,第一个参数是错误信息,二参是成功之后的结果
                if(err) return reject(err);//return是为了终止下面代码执行
                resolve(dataStr);
            })
    });
    
    
    getFile.then((r1)=>{
    console.log(r1)//成功状态
    }, (err)=>{
    console.log(err.message)//失败状态
    });
    
    

    这样拆解,就和es6的教程里面的一样了,这样就容易理解了吧,在教程里有说明了,then是给Promise对象实例传进去一个回调函数,一个成功的,一个失败的

    then方法可以接受两个回调函数作为参数。第一个回调函数是Promise对象的状态变为resolved时调用,第二个回调函数是Promise对象的状态变为rejected时调用。这两个函数都是可选的,不一定要提供。它们都接受Promise对象传出的值作为参数
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 2月24日
  • 已采纳回答 2月16日
  • 创建了问题 8月27日

悬赏问题

  • ¥15 cmd批处理参数如果含有双引号,该如何传入?
  • ¥15 fx2n系列plc的自控成型机模拟
  • ¥15 时间序列LSTM模型归回预测代码问题
  • ¥50 使用CUDA如何高效的做并行化处理,是否可以多个分段同时进行匹配计算处理?目前数据传输速度有些慢,如何提高速度,使用gdrcopy是否可行?请给出具体意见。
  • ¥15 基于STM32,电机驱动模块为L298N,四路运放电磁传感器,三轮智能小车电磁组电磁循迹(两个电机,一个万向轮),如何通过环岛的原理及完整代码
  • ¥20 机器学习或深度学习问题?困扰了我一个世纪,晚来天欲雪,能饮一杯无?
  • ¥15 c语言数据结构高铁订票系统
  • ¥15 关于wkernell.PDB加载的问题,如何解决?(语言-c#|开发工具-vscode)
  • ¥100 某宝多次访问被拒绝,求解
  • ¥15 (标签-STM32|关键词-智能小车)