【Promise】Promise实现请求超时处理(加强版)

摘要:
昨天我无所事事,所以我优化了之前写的承诺。代码如下:/*write-file,append-write,read-file*/varfs=require('fs');functionwrapper(fn,context){varargs=Array.prototype.slice.call(arguments,2);returnnewPromise((resolve,reject)=˃{args.push((err,dat

  昨天闲来无事,于是把之前写过的promise优化了一下,代码如下:

/*写文件、追加写、读文件*/
var fs = require('fs');

function wrapper(fn,context) {
    var args = Array.prototype.slice.call(arguments,2);
    return new Promise((resolve,reject) => {
        args.push((err,data) => {
            err ? reject(err) : resolve(data);
        });
        fn.apply(context,args);
    });
}

wrapper(fs.writeFile,fs,'message.txt','word')
    .then(() => wrapper(fs.appendFile,fs,'message.txt','word'))
    .then(() => wrapper(fs.readFile,fs,'message.txt','word'))
    .then(data => console.log(data))
    .catch(err => console.log(err));


/*获取员工id、并发获取两个接口信息、读信息*/
var http = require('http');
var url = require('url');

function delayPromise(ms) {
    return new Promise((resolve,reject) => {
        setTimeout(reject, ms);
    });
}

function get(url,ms) {  
    return new Promise.race([
        delayPromise(ms),
        wrapper(request,null,url).then(data => {
            return JSON.parse(data);
        })
    ]);
    
}

get('http://demos.so/result/homework.promise.userInfo')
    .then( data => {
        return Promise.all([get('http://demos.so/result/userid=' + args['_id']), get('http://demos.so/result/student=' + args['_id'])])
    }
    .then( data => console.log(data))
    .catch( err => console.log(args));

免责声明:文章转载自《【Promise】Promise实现请求超时处理(加强版)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇二进制协议gob及msgpack介绍Ubuntu18.04完全卸载mysql5.7并安装mysql8.0的安装方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

skynet源码分析之sproto使用方法

上一篇文章介绍sproto的构建流程(http://www.cnblogs.com/RainRill/p/8986572.html),这一篇文章介绍sproto如何使用,参考https://github.com/cloudwu/sproto。 A端主动给B端发送请求:调用request_encode对lua表进行编码,再用sproto.pack打包。 B端...

【巷子】---json-server---基本使用

一、前后端并行开发的痛点 前端需要等待后端开发完接口以后 再根据接口来完成前端的业务逻辑 二、解决方法 在本地模拟后端接口用来测试前端效果 这种做法称之为构建前端Mock 三、json-server的基本使用 (1)、全局安装 cnpm install json-server -g (2)、准备json文件 (data.json) json-serv...

python中json.loads 返回类型是str 而不是 dict

   解析本地文件中的Json文件时,json.loads 之后的返回类型是str ,直接上代码 import json with open ("urlJson.txt",'r',encoding='utf-8') as f: data = f.read() json_str = json.dumps(data) print (t...

Vue.js 源码分析(二十七) 高级应用 异步组件 详解

当我们的项目足够大,使用的组件就会很多,此时如果一次性加载所有的组件是比较花费时间的。一开始就把所有的组件都加载是没必要的一笔开销,此时可以用异步组件来优化一下。 异步组件简单的说就是只有等到在页面里显示该组件的时候才会从服务器加载,不显式的话就不会加载,这样即可提高客户端的访问速度也可以降低对服务器的请求次数,可谓优化的一个利器。 异步组件常用有3种异步...

小程序-formdata传参

项目背景,后端接口要求formData传参: 在util.js文件中封装转化函数,代码如下: const formatTime = date =>{ const year =date.getFullYear() const month = date.getMonth() + 1const day =date.getDate() con...

释放虚拟磁盘未使用空间来减少计费容量

一些Azure上的Linux虚拟机用户遇到过一个令人困惑的虚拟磁盘计费问题。一旦写入大量数据使得磁盘容量变大后,即使删除那些数据,仍会一直按照最大使得磁盘容量计费。这实际上是由于一部分虚拟机上的Linux操作系统不支持一些必要的功能或用户没有做一些磁盘维护所致的。 在Azure上,如果我有一个100GB的虚拟磁盘,里面实际只保存了20GB的数据,这个磁盘的...