精华内容
下载资源
问答
  • promise.all其中一个失败
    2021-11-25 19:05:47
    Promise.all(
      [
        Promise.reject({ code: 500, msg: "error" }),
        Promise.resolve({ code: 200, msg: "success" }),
        Promise.resolve({ code: 200,  msg: "success" })
      ].map(item => item.catch(e => e))
    )
      .then(res => {
        console.log("res=>", res);
      })
      .catch(error => {
        console.log("error=>", error);
      });
    
    更多相关内容
  • js代码-面试题2:使用promise.all 进行5个请求,若其中一个失败了,怎么让其他4个成功返回
  • hello~同学们好,今天分享一个js的Promise.all(), 当其中一个失败状态如何正常获取其他值的小技巧. 这是原来的代码段,可以看到 使用Promise.all 发送了3个携带id的请求. // 使用Promise.all 其中id为69的商品,...

    hello~同学们好,今天分享一个js的Promise.all(), 当其中一个为失败状态如何正常获取其他值的小技巧.

    这是原来的代码段,可以看到 使用Promise.all 发送了3个携带id的请求.

    在这里插入图片描述

    			// 使用Promise.all 其中id为69的商品,返回失败,会导致整个Promise接受到reject状态.
    			// 所以进行改造, p catch 得到的err  为返回失败抛出的信息, 进行置空
                              
                     Promise.all([
    					getProductDetail(this.wybWuyiId, from),
    					getProductDetail('88', from),
    					getProductDetail('69', from)
    				].map(p => p.catch(err => '')))
    				.then(res => {
    					res.map(item => {
    						this.wuyiActivityList.push(item.data.storeInfo)
    					})
    				})
    				.catch(err => {
    					// console.log('err',err);
    				})
                              
                              
    
    
    展开全文
  • promise.all一个失败剩下的都不执行,还是不管什么情况所有的promise都会执行?
  • Promise.all 获取失败原因

    千次阅读 2022-01-17 16:40:32
    Promise.all()接受一个promise任务组成的数组,可以同时处理多个promise任务,当所有的任务都执行完成时,Promise.all()返回resolve,但当有一个失败(reject),则返回失败的信息,即使其他promise执行成功,也会...

    Promise.all()接受一个由promise任务组成的数组,可以同时处理多个promise任务,当所有的任务都执行完成时,Promise.all()返回resolve,但当有一个失败(reject),则返回失败的信息,即使其他promise执行成功,也会返回失败。可以用一句话来说Promise.all(),要么全有要么全无。

    但话又说回来,有时候我们使用Promise.all()执行很多个网络请求,可能有一个请求出错,但我们并不希望其他的网络请求也返回reject,要错都错,这样显然是不合理的。

    而我们需要的是即使有一两个接口请求失败,我们依然可以获取到成功的接口请求数据。

    那下面说说如何做才能做到promise.all中即使一个promise程序reject,promise.all依然能把其他数据正确返回。

    首先我们先创建一个resolve和reject的promise函数

    const promiseResove = (promiseResolveSecond = function(n=0){
        return new Promise(function(resolve, reject){
            setTimeout(function() {
                resolve({
                    resolveAfterSeconds: n
                })
            }, n * 100);
        })
    })
    
    const promiseReject = (promiseRejectSecond = function(n=0) {
        return new Promise(function(resolve, reject) {
            setTimeout(function () {
                reject({
                    rejectAfterSeconds: n
                })
            }, n * 100)
        })
    })
    

    使用上面的函数创建一个所有结果能正确返回的promise.all程序

    var promiseArray = []
    promiseArray.push(promiseResove(1))
    promiseArray.push(promiseResove(3))
    promiseArray.push(promiseResove(2))
    
    var handlePromise = Promise.all(promiseArray)
    handlePromise.then(function(values) {
        console.log('all promise are resolved', values)
    }).catch(function(reason) {
        console.log('promise reject failed reason', reason)
    })
    
    • 执行结果如下

    然后在创建一个拥有reject函数返回的promise

    var promiseArray = []
    promiseArray.push(promiseResove(1))
    promiseArray.push(promiseReject(3))
    promiseArray.push(promiseResove(2))
    
    var handlePromise = Promise.all(promiseArray)
    handlePromise.then(function(values) {
        console.log('all promise are resolved', values)
    }).catch(function(reason) {
        console.log('promise reject failed reason', reason)
    })
    
    • 执行结果如下

    promise.all中有一个promise执行失败返回reject时,promise.all直接返回执行失败的promise结果。

    但我们还想看到其他两个resolve的结果,所以后面用一个trick方法,来解决这个问题。

    代码修改如下

    var promiseArray = []
    promiseArray.push(promiseResove(1))
    promiseArray.push(promiseReject(3))
    promiseArray.push(promiseResove(2))
    
    // 将传入promise.all的数组进行遍历,如果catch住reject结果,
    // 直接返回,这样就可以在最后结果中将所有结果都获取到
    var handlePromise = Promise.all(promiseArray.map(function(promiseItem) {
        return promiseItem.catch(function(err) {
        return err
      })
    }))
    handlePromise.then(function(values) {
        console.log('all promise are resolved', values)
    }).catch(function(reason) {
        console.log('promise reject failed reason', reason)
    })
    

    和之前唯一的不同就是在promise数组添加了一个回调函数,当数组中有接口reject时,catch住结果直接返回,这样失败的结果也可以当做成功处理,所以在promise.all中我们可以监听到所有结果的返回,然后在针对不同的返回值进行处理。




    原文链接:https://www.jianshu.com/p/3b42565e65ef

    展开全文
  • const promise1 = new Promise(resolve => setTimeout(resolve, 1000));...Promise.all([promise1.catch(() => {status: "fail"}), promise2.catch(() => {status: 'fail'})]) .then(() => { console.lo
    const promise1 = new Promise(resolve => setTimeout(resolve, 1000));
    const promise2 = Promise.reject(200);
    // 方法1:
    Promise.all([promise1.catch(() => {status: "fail"}), promise2.catch(() => {status: 'fail'})])
        .then(() => {
            console.log('已完成')
        })
        .catch(() => {
            console.log('已拒绝')
        })
    // 方法2:
    // Promise.allSettled([promise1, promise2])
    //     .then(() => {
    //         console.log('已完成')
    //     })
    //     .catch(() => {
    //         console.log('已拒绝')
    //     })
    
    展开全文
  • const one = new Promise((res, rej) => { setTimeout(() => { res(1) }, 1000) }) const two = new Promise((res, rej) => { setTimeout(() => { rej('error') }, 2000) }) const three= new ...
  • 深入理解Promise.all

    2020-10-18 06:31:07
    主要介绍了深入理解Promise.all,小编觉得挺不错的,现在分享给大家,也给大家做参考。一起跟随小编过来看看吧
  • promise.all队列中,使用map每一个过滤每一个promise任务,其中任意一个报错后,return一个返回值,确保promise能正常执行走到.then中 var p1 = new Promise((resolve, reject) => { resolve('p1'); }); var ...
  • function getData(api){ return new Promise((resolve,reject) => { setTimeout(() => { var ok = Math.random() > 0.5 // 模拟请求成功或失败 if(ok) resolve('get ' + api...
  • let fn = new Promise( (res,rej) =>...Promise.all([fn,fn1...].map(p=>{ //.then返回需要的东西 .catch返回一些错误信息 return p.then(e=> { return p }).catch(err=> return '错误了
  • Promise.all( [ Promise.reject({ code: 500, msg: "服务异常" }), Promise.resolve({ code: 200, list: [] }), Promise.resolve({ code: 200, list: [] }) ].map(p => p.catch(e => e)) ) .the...
  • Promise.all 的理解Promise.all()方法用于将多个 Promise 实例,包装成一个新的 Promise 实例。Promise.all()方法的参数可以不是数组,但...
  • Promise all 特性(只要失败一个就不会走then)的解决方案
  • 大家都知道 Promise.all 传入的 promise array 里面,只要有其中一个 promise reject 了, 即使它前面的 promise 正常 fulfilled,整个 promise.all 也会直接走到 catch,并且只会 catch 第一个 reject 的返回值。 ...
  • `Promise.all()`方法中某个 Promise 实例出错不影响其他的方法
  • Promise.all 使用

    2020-01-08 16:51:32
    Promise.all 使用 Promise.all(iterable)方法返回一个 Promise 实例。 简单总结一下: 只有参数内所有的promise返回resolve,才会返回...Promise.all 在任意一个传入的 promise 失败时返回失败 一般使用1 var p1...
  • Promise.all() :方法用于将多个 Promise 实例,包装成一个新的 Promise 实例。 Promise.allSettled():用来确定一组异步操作是否都结束了(不管成功或失败)。所以,它的名字叫做”Settled“,包含了”fulfilled...
  • 官方定义:Promise.all()方法接收一个promise的iterable类型(注:Array,Map,Set都属于ES6的iterable类型)的输入,并且只返回一个Promise实例,那个输入的所有promise的resolve回调的结果是一个数组。这个Promise...
  • function getData(api){ return new Promise((resolve,reject) => { setTimeout(() => { var ok = Math.random() > 0.5 // 模拟请求成功或失败 if(ok) ...
  • 但是其中如果有一个接口失败了那么就不会继续走下去了 会影响到其他接口操作,关联性太强了, 需求: 前面打包的的几个接口操作无论失败或者成功几个都需要走后面的接口,就会有点麻烦了, 解决: const p1 = ...
  • Promise在各种场景的使用(Promise.allPromise.allSettled、Promise.race、Promise.any)
  • Promise.all的错误处理(挺有用的)

    千次阅读 2020-06-03 11:14:53
    该方法指当所有在可迭代参数中的 promises 已完成,或者第一个传递的 promise(指 reject)失败时,返回 promise。但是当其中任何一个被拒绝的话。主Promise.all([..])就会立即被拒绝,并丢弃来自其他所有promis的...
  • Promise.all();Promise.allSettled();Promise.any();Promise.race()

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,126
精华内容 3,250
关键字:

promise.all其中一个失败