zoukankan      html  css  js  c++  java
  • nodejs 8 利用原生 util.promisify() 实现 promise.delay()

    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;
  • 相关阅读:
    CAS简介
    Volatile的3大特性
    dsf对矩阵进行搜索
    JVM
    REST风格
    自定义Starters(自动配置Bean)
    反射和注解的原理
    mybatis的注解开发
    Java的多线程安全
    mybatis(3)
  • 原文地址:https://www.cnblogs.com/jasonxuli/p/7019398.html
Copyright © 2011-2022 走看看