Nodejs 8 在 util 包里新增了 promisify() 。这个方法基本和 bluebird 的 promisify() 作用一样,即把最后一个参数是 callback 函数的函数变成返回 promise 的函数;

下面代码,用 expressjs 做载体,创建了一个 web API,延迟 3 秒后随机返回标题为 Success 或者 Custom Error 的页面。

delayP() 的作用与 bluebird 的 promise.delay() 方法作用相仿,可以在 promise chain 中进行 delay 操作。

"use strict";
var express = require('express');
var router = express.Router(); var util = require('util') /* 延迟 3 秒后,随机返回标题为 Success 或者 Custom Error 的页面 */
router.get('/', function (req, res, next) {
getDelayedResult()
.then(function(r){
console.log("delayed callback.")
res.render('index', {title: r});
})
.catch(function(e){
console.log(e)
res.render('index', {title: e.message});
}) }); async function getDelayedResult(){
console.log("async function.");
return await delayP(3000) // await 后面必须返回 promise 类型
} function delay(t, cb) { // cb: function callback(){}
setTimeout(function(){
var err = null;
var rand = parseInt(Math.random() * 2); // 随机数取值范围为整数 0, 1
console.log(rand);
if(rand)
err = new Error("Custom Error");
cb(err, "Success."); // cb: 第一个参数是 err,如果 err != null,那么认为是错误,会进入 promise.catch() 分支; 否则,进入 then() 分支。
}, t)
}
var delayP = util.promisify(delay) // 模拟异步IO请求;使用原生 promisify() 把 delay 函数 promise 化,以返回 promise 类型; module.exports = router;

nodejs 8 利用原生 util.promisify() 实现 promise.delay()的更多相关文章

  1. Node.js 8 中的 util.promisify的详解

    Node.js 8带来了 很多新特性 .其中比较值得注意的,便有 util.promisify() 这个方法. util.promisify() 虽然 Promise 已经普及,但是 Node.js ...

  2. util.promisify 的那些事儿

    util.promisify是在node.js 8.x版本中新增的一个工具,用于将老式的Error first callback转换为Promise对象,让老项目改造变得更为轻松. 在官方推出这个工具 ...

  3. [Node.js] Node Util Promisify - How to Convert Callback Based APIs to Promise-based

    Since Node.js V8.0+, it introduces a 'util' libaray, which has a 'promisfy' function. It can conver ...

  4. 利用原生JS实现类似浏览器查找高亮功能(转载)

    利用原生JS实现类似浏览器查找高亮功能 在完成 Navify 时,增加一个类似浏览器ctrl+f查找并该高亮的功能,在此进行一点总结: 需求 在.content中有许多.box,需要在.box中找出搜 ...

  5. android安全问题(八)伪造短信(利用原生android4.0漏洞)

    导读:本文利用android4.0的一个原生漏洞来伪造短信.无须声明任何权限即可伪造发送方为任何号码的短信给用户. android4.0发布已经是很久很久很久很久以前的事情了,这个漏洞早就报了出来,之 ...

  6. 利用原生js制做数据管理平台,适合初学者学习

    摘要:数据管理平台在当今社会中运用十分广泛,我们在应用过程中,要对数据进行存储,管理,以及删除查询等操作,而我们在实际设计的时候,大牛们大多用到的是JQuery,而小白对jq理解也较困难,为了让大家回 ...

  7. 利用原生js做数据管理平台

    摘要:数据管理平台在当今社会中运用十分广泛,我们在应用过程中,要对数据进行存储,管理,以及删除查询等操作,而我们在实际设计的时候,大牛们大多用到的是JQuery,而小白对jq理解也较困难,为了让大家回 ...

  8. promisify,promisifyAll,promise.all实现原理

    1.promisify function toPrimisify (fn){ return function (...args){      return new Promise(function(r ...

  9. linux下redis4.0.2集群部署(利用原生命令)

    一.部署架构如下 每台服务器准备2个节点,一主一从,主节点为另外两台其中一台的主,从节点为另外两台其中一台的从. 二.准备6个节点配置文件 在172.28.18.75上操作 cd /etc/redis ...

随机推荐

  1. 安装postgresql之后为什么找不到postgresql service

    没有正常启动 postgresql service.可以 在运行里面 输入 services.msc 找到 postgresql 的服务.启动他.或者也可以用postgres 自带的 工具pg_ctl ...

  2. eclipse的.properties文件中文显示问题

    eclipse的.properties文件,默认的编码方式是iso-8859-1. 所以中文显示有问题. 按照下面的方式,把Default Encoding修改成UTF-8就可以了.

  3. window.postMessage跨文档通信

    window.postMessage 1.浏览器兼容情况:IE8+.chrome.firefox等较新浏览器都至此. 2.使用方法: a.otherWindow.postMessage( messag ...

  4. vux报错二

    执行npm run build后 "build": "node build/build.js",   // 输出提示信息 - 提示用户请在 http 服务下查看 ...

  5. mysql 效率 inner join 与 where in

    -- report 123.77k行 report_loss 620 行 -- inner join ;report_loss 索引 all report 索引 eq_ref ; -- total 0 ...

  6. 2.实现官网环境, 搭建HTTP服务器

    1.建立 HTTP 服务器 Node.js 是为网络而诞生的平台,但又与 ASP.PHP 有很大的不同,究竟不同在哪里呢?如果你有 PHP 开发经验,会知道在成功运行 PHP 之前先要配置一个功能强大 ...

  7. saltstack之syndic的配置

    author: headsen  chen date: 2018-08-04   22:22:09 1,架构 2,配置 2.1,配置master: yum  -y install epel-relea ...

  8. 【BZOJ1879】[Sdoi2009]Bill的挑战 状压DP

    [BZOJ1879][Sdoi2009]Bill的挑战 Description Input 本题包含多组数据.  第一行:一个整数T,表示数据的个数.  对于每组数据:  第一行:两个整数,N和K(含 ...

  9. nginx解决带_的head内容丢失

    若请求 Head 信息中存在自定义信息并且以 "_" 下划线间隔,则必须配置underscores_in_headers 否则 Head 无法向 Tomcat 转发 解决办法: 在 ...

  10. Python+ Calibre 处理 中文报纸

    import re ##2 line='<a href=nw.D110000renmrb_20180401_1-01.htm><script>document.write(vi ...