为什么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)});

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

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对象传出的值作为参数

看看这个 ES6 入门教程 https://es6.ruanyifeng.com/#docs/promise https://segmentfault.com/a/1190000009478377

不是then方法的参数传进function(resolve,reject),而是function(resolve,reject)中执行resolve(dataStr),把dataStr传给了then方法。实现这个流程的核心,是promise内部有一些变量来保存数据,来控制队列

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632