Promise超时情况

export const ERROR_PROMISE_TIMEOUT = ‘ERROR_PROMISE_TIMEOUT‘;

export default function (promise, timeout) {
  let timer = undefined;
  return Promise.race([
    new Promise(function (resolve, reject) {
      timer = setTimeout(() => {
        reject(new Error(ERROR_PROMISE_TIMEOUT));
      }, timeout)
    }),
    promise.then(res => {
      timer && window.clearTimeout(timer);
      return res;
    }).catch(err => {
      timer && window.clearTimeout(timer);
      return Promise.reject(err);
    })
  ])
}

原文地址:https://www.cnblogs.com/rusr/p/9983711.html

时间: 2024-08-28 23:41:44

Promise超时情况的相关文章

简单几招模拟网络超时情况

我们先来聊一聊网络超时的概念,以及模拟网络超时对我们程序的必要性 要想了解如何模拟网络超时的情况,我们需要先了解一下 为什么会网络超时呢 简单的说:就是你向服务端发送数据请求,然尔服务器没返回数据,或返回数据太慢导致未收到返回数据. 比如,你要下载一个东东,你向服务器发送下载这个东东的请求,但等了好长时间都没有收到服务器同意你接收下载数据的请求,所以也不能一直这样等下去,你的电脑就会报告网络超时,如果不是你的网络故障,那么就是对方服务器的问题. 我们知道在TCP建立连接的时候有3次握手的规则 1

在不用Promise的情况下如何控制异步请求?

如何更好的控制异步请求?相信大家一定首选Promise对象.确实,使用Promise控制异步请求确实非常方便,直接使用then()方法就可以实现当一个异步请求完成后再处理另一个请求或操作.同时,这样的代码也避免了使用大量的回调函数造成的"丑陋的代码". 不过,在实际的工作中却总是不能尽人意.虽然es6越来越普及,但偶尔也会遇到一些维护老项目的情况,况且Promise的兼容性也是个问题...... 恰好我今天也遇到了这个问题,不过情况更加复杂一些.简单描述一下就是--老项目有一个需求就是

redis分布式锁深度剖析(超时情况)

1.redis分布式锁的基本实现 redis加锁命令: SETNX resource_name my_random_value PX 30000 这个命令的作用是在只有这个key不存在的时候才会设置这个key的值(NX选项的作用),超时时间设为30000毫秒(PX选项的作用) 这个key的值设为“my_random_value”.这个值必须在所有获取锁请求的客户端里保持唯一. SETNX 值保持唯一的是为了确保安全的释放锁,避免误删其他客户端得到的锁.举个例子,一个客户端拿到了锁,被某个操作阻塞

20.超时情况下的服务降级写法

在hystrix的超时回调函数中处理超时推荐其他商品 package main import ( "errors" "fmt" "github.com/afex/hystrix-go/hystrix" "math/rand" "time" ) type Product struct { ID int Title string Price int } func getProduct() (Product, e

JavaScript Promise小结

事件模型是在事件发生之前绑定监听事件,在事件发生时监听到事件的发生. 如果事件发生之后进行绑定监听事件,则监听不到事件的发生. ES6提供的Promise实现了单个值的任意时刻的监听,Rxjs的Observable提供了对一系列值的任意时刻的监听. 所谓的任意时刻,指的是在值发生改变之后进行监听也能监听到变化. 一.何为Promise 所谓promise,就是一个对象,用来传递异步操作的信息.它代表了某个未来才会知道结果的事件(通常是一个异步操作). Promise有自己的生命周期,在定义时,它

前端要给力之:红绿灯大战中的火星生命-Promise

目录 目录 传说的开始 看到winter的代码我的第一反应是全无promise的精髓 其实我了解Promise也是新近的事情 我与Promise后来发生的故事 红绿灯大战的亲历实录 Promise写出来怎么会是这个样子 欢迎回到火星 感谢米粽粽同学提到我的一篇旧文 第一步的抽象 一点说明前提 重新定义问题 Promise的编程基础之逻辑过程 如何确认一个数据就绪 然后then只能处理一个数据 最后任何情况下then总是立即返回一个promise 解决问题的方法 得到一些基础件 如何在Promis

设置调用方法的超时时间

在工作中,遇到这样一个需求,我要做一个业务,要验证一下现有的数据是否正确,但这个验证又不是必须的,只是说如果这里验证不通过,后面流程就可以不走了,但是如果这里没有验证到,后面也会有验证.也就是说不影响主流程,算得上是一个优化吧.比如我要查询一个东西,但是这个时间不能超过1秒. 在网上查了一下,基本上都是异步执行,有两个线程来做.我查到有两种方法. 第一种 独立成一个类 代码如下: (1).FuncTimeOut类 /// <summary> /// 超时设置类 /// </summary

SQL Server超时诊断和调优

SQL Server超时诊断和调优 一. 超时分析 下面是用户访问一个Web站点的常见错误: 详细错误描述如下: [SqlException (0x80131904): Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.] System.Data.SqlClient.SqlConnection.OnError(SqlExc

[20140702]奇怪的应用程序超时

背景: 应用程序,在某个时刻或出现超时,一开始以为是dbcc checktable造成,使用了各种手段抓取sql,xevent,profile都没有找到. 之前还写了一篇,[20140117]疑似checkpoint堵塞数据库连接,其实问题不是这个. 问题: 出现超时一般是在索引整理的job运行的时候出现,所以怀疑是整理占用大量资源到时,在传输sql语句到sql server的时候出现超时. 不过具体,到底出在执行超时的哪一个环节,目前还不清楚,因为根本抓不到事件. 具体超时可以看:[20140