首页 > 其他分享 >promise

promise

时间:2022-09-07 11:12:57浏览次数:46  
标签:resolve PromiseResult reject Promise new promise

  • 回调函数内部的 this 都是指向 window;回调函数定义:当前处理逻辑完成之后,执行封装在callback函数中的后处续理逻辑;
  • new Promise() 参数接收一个同步自执行匿名函数,构建实例时,该参数就会自动执行
    let promise = new Promise((resolve,reject) => {
        console.log(1);
        resolve("returnValue"); // resolve和reject函数传入的实参就当前promise对象的[[PromiseResult]]的值
    });
    console.log(2); //控制台输出1->2
    
    promise对象:
    [[PromiseState]]: "pending"      // 当前promise的状态,可选值:fulfilled(成功态)、rejected(失败态)、pending(等待,初始值)
    [[PromiseResult]]: "returnValue" // 当前promise的值
    
    resolve() -> PromiseStatus从pending变为fulfilled;只接受一个参数
    reject()  -> PromiseStatus从pending变为rejected;只接受一个参数

 

  • then 方法会返回一个新的 promise(testPromise):
    let promise = new Promise((resolve, reject) => { resolve(1);});
    let newPromise = promise.then(res => {
        return res*2; // 默认 return undefined; 返回值做为当前then方法返回的promise的[[PromiseResult]]属性的值
    })
    // newPromise.[[PromiseResult]] = 2

 

  • then 抛错
    let promise = new Promise((resolve, reject) => {
        resolve(1);
    });
    // 如果then方法抛错
    let newPromise = promise.then(res => {
        throw new Error("参数必须是字符串!");
    })
    newPromise 对象: [[PromiseState]]: "rejected"
                     [[PromiseResult]]: Error: 参数必须是字符串!
如果没有错误捕获,则控制台报错如下:

 

如果存在错误捕获,则控制台不会报错,输出如下:
newPromise.catch(err => {
    console.log(err);
})

 

 

  • 如果 then 方法的回调函数返回一个普通值(a),则 returnPromise.[[PromiseResult]] = a
  • 如果 then 方法的回调函数返回一个promise(b),则 returnPromise= b
    let promise = new Promise((resolve, reject) => {resolve(1);});
    let newPromise = promise.then(res => {
        return new Promise((resolve, reject) => {
            resolve('a');
        });
    })
    newPromise对象如下:[[PromiseState]]: "fulfilled"
                       [[PromiseResult]]: a

 

  • Promise.reject('reject') 返回一个新失败态的 promise:{[[PromiseState]]: "rejected" ,  [[PromiseResult]]: "reject"} ; 如果 reject() 不接收参数,则返回的 [[PromiseResult]]=undefined
  • Promise.all,promises 数组中所有 promise 对象都达到 resolve 状态,才执行 then 回调。
    var p1 = Promise.resolve(1);
    var p2 = Promise.resolve(2);
    var p3 = Promise.resolve(3);
    const promise = Promise.all([p1, p2, p3]).then(function(results){
        return results;
    });
    console.log(promise); // promise = {[[PromiseState]]: "fulfilled" , [[PromiseResult]]: [1,2,3]}

 

 

 

标签:resolve,PromiseResult,reject,Promise,new,promise
From: https://www.cnblogs.com/zzAyy/p/16664656.html

相关文章

  • 手写Promise主要思路详解
    基本框架要想手写Promise,我们就要先了解Promise到底实现了什么,先从最基础的地方开始。Promise最基本的地方就是传入一个函数形式的参数,在then方法传入对于该函数所对应的......
  • js-Promise的all、allSettled、any、race 方法简介
    1、all所有的Promise对象均成功后才会执行all中的then回调,否则返回的是最先rejected状态的值。constpromise1=newPromise((resolve,reject)=>{setTimeout((......
  • JS实现异步的方法:回调函数callback、事件监听、setTimeout、Promise、生成器Generato
    所有异步任务都是在同步任务执行结束之后,从任务队列中依次取出执行。回调函数是异步操作最基本的方法,比如AJAX回调,回调函数的优点是简单、容易理解和实现,缺点是不利于代码......
  • JS中Promise
    Promise的作用:Promise是异步微任务,解决了异步多层嵌套回调的问题,让代码的可读性更高,更容易维护。 Promise如何使用:Promise是ES6提供的一个构造函数,可以使用Promise构......
  • 记一个注意事项:从 forEach argument 返回的 Promise 被忽略
    举例说明:constarr=[1,2,3]arr.forEach(asyncitem=>{//...})上面的代码校验会出一个警告,从forEachargument返回的Promise被忽略 主要原因:foreac......
  • Typescript类型体操 - Promise.all
    题目中文键入函数PromiseAll,它接受PromiseLike对象数组,返回值应为Promise<T>,其中T是解析的结果数组。constpromise1=Promise.resolve(3);constpromise2=42;cons......
  • Promise
    Promise1、Promise有什么用?Promise是ES6中的一个对象,用来解决异步编程问题的一种方案,在网上经常看到回调地狱问题,Promise把这种嵌套调用的形式改为链式调用的方式,使得代......
  • vue中Promise的使用方法详情 vue中 ajax 同步执行
    vue中Promise的使用方法详情目录一、使用1.promise是一种异步解决方案2.asyncawait简介:promise是什么,它可以说是异步编程的一种解决方法,就拿传统的ajax发请求来说,单个......
  • node35-promise
     constfs=require('fs');letpromise=newPromise((resolve,reject)=>{fs.readFile('./1.txt','utf8',(err,result)=>{if(err!=null)......
  • node37-promise链式编程
    constfs=require('fs');/*fs.readFile('./1.txt','utf8',(err,result1)=>{console.log(result1);fs.readFile('./2.txt','utf8',(err,result2)=......