今天在网上查看promise资料,发现promise有三种状态,pending,fullfilled,rejected.分别对应了初始化状态,成功状态及失败状态。为了理解写测试代码来实验:
function a(isTrue) {
    return new Promise(function (resolve, reject) {
        if (isTrue) {
            console.log('--------fun reslove');
            resolve('Hello ');
        }
        else {
            console.log('-------fun reject');
            reject('Hi ');
        }
    });
}
a(true).then(function (res) {
    console.log('---------result reslove');
    console.log(res);
}, function (rej) {
    console.log('---------result reject');
    console.log(rej);
});

得到结果:
--------fun reslove
---------result reslove
Hello

再次运行代码,改为a(false)得到结果:
-------fun reject
---------result reject
Hi
得到结果说明正确和失败的结果分别用resolve 和reject  来返回及接收,但随后就产生了疑问。
在得到promise对象后,用.then来处理,他有2个参数,第一个为resolve,用于接收成功状态的值,第二个为reject用来接收失败状态的值,同时有一个catch 的方法,解释是相当于Onreject函数的一种简单写法及then(fn).catch(fn)===then(fn).then(null,fn)。随即修改代码
a(false).then(function (res) {
    console.log('---------result reslove');
    console.log(res);
}).catch(function(err){
    console.log('---------result reject');
    console.log(err);
})
运行结果得到
-------fun reject
---------result reject
Hi
得到结果完全符合预计,随即完善代码,如下:
function a(isTrue) {
    return new Promise(function (resolve, reject) {
        var client = require('redis').createClient();
        var key = 'err';
        var value = 'false';
        client.sadd(key, value, function (err, reply) {
            if (err) {
                reject(err);
            }
            else {
                resolve(reply);
            }
        });
        client.quit();
    })
}

a().then(function (res) {
    console.log('---------result reslove');
    console.log(res);
}).catch(function(err){
    console.log('---------result reject');
    console.log(err);
})
该试例在redis 没有打开服务状态下执行,得到结果如下:
------------fun reject
---------result reject
{ AbortError: Stream connection ended and command aborted.
  .......
  .......
}
一样得到了预期结果。思考是否每次调用都需要处理promise对象都需要写reject接收,于是修改代码如下:
function a(isTrue) {
    return new Promise(function (resolve, reject) {
        var client = require('redis').createClient();
        var key = 'err';
        var valus = 'false';
        client.sadd(key, value, function (err, reply) {
            if (err) {
                console.log('------------fun reject');
                reject(err);
            }
            else {
                console.log('------------fun resolve');
                resolve(reply);
            }
        });
        client.quit();
    }).catch(function (err) {
        console.log('--------------fun err');
        return err;
    })
}
a().then(function (res) {
    console.log('----------result resolve');
    console.log(res);
},function(err){
    console.log('----------result reject');
    console.log(err);
})
运行得到如下结果:
------------fun reject
--------------fun err
----------result resolve
{ AbortError: Stream connection ended and command aborted.
  ...........
  ...........
}
发现在发生错误时去调用了reject,执行reject后直接跳进了catch,利用return 返回时promise对象状态为成功态。在处理Promise对象时,resolve直接获取到了错误的值。此刻若使用promise.all将因为无法判断错误状态,全部返回。

node学习----Promise 初见的更多相关文章

  1. [学姿势]实验室搬砖+node学习

    这周开始进行收尾工作,我当然没有进行核心技术的开发,主要负责的是对web端进行展示上的修修补补,主要包括添加VLC播放器.rtsp视频流以及一些js细节. 1.VLC 全称为Video Lan Cli ...

  2. 2015第40周一Node学习

    node学习尝试 早上看了张丹大牛博客文章nodeJS学习路线图和node从零入门系列,感觉获益匪浅,尝试了里面几项内容,对node有了更深入的认识. npm npm是一个node包管理和分发工具,已 ...

  3. node 学习资料

    Node 学习资料: 资料名称 网址 Node.js 中文API文档 http://nodejs.cn/api/ Node 菜鸟教程 http://www.runoob.com/nodejs/node ...

  4. Node学习HTTP模块(HTTP 服务器与客户端)

    Node学习HTTP模块(HTTP 服务器与客户端) Node.js 标准库提供了 http 模块,其中封装了一个高效的 HTTP 服务器和一个简易的HTTP 客户端.http.Server 是一个基 ...

  5. node学习笔记第一天

    ES6---* JavaScript语言随着使用的人越来越多,ECMA语法规范:if/else* 为了让js语言更适应大型应用的开发.旨在消除一些怪异的行为 ### 包含内容(strict严格模式)- ...

  6. 学习Promise笔记

    什么是Promise? MDN对Promise的定义:Promise对象用于异步操作,它表示一个尚未完成且预计在未来完成的异步操作. 在学习Promise之前得先了解同步与异步:JavaScript的 ...

  7. Node学习图文教程之express重写留言本案例

    写在前面 小伙伴们大家好,我是你们的pubdreamcc,接着前面的学习,这篇博文出至于我的GitHub仓库:Node学习教程资料,如果你觉得对你有帮助,欢迎star,你们的点赞是我持续更新的动力,谢 ...

  8. Node学习(二) --使用http和fs模块实现一个简单的服务器

    1.创建一个www目录,存储静态文件1.html.1.jpg. * html文件内容如下: 12345678910111213 <html lang="en">< ...

  9. Node学习笔记(四):gulp+express+io.socket部署angularJs2(填坑篇)

    这篇就先暂停下上篇博客--你画我猜的进度,因为在做这个游戏的时候,想采用最新的ng2技术,奈何坑是一片又一片,这边就先介绍下环境部署和填坑史 既然要用ng2,首先要拿到资源,我这边用的是angular ...

随机推荐

  1. [转]EntityFramework中常用的数据修改方式

    本文转自:http://blog.csdn.net/itmaxin/article/details/47662151 上一篇文章里提到了 EntityFramework中常用的数据删除方式,那么修改对 ...

  2. C#语言-02.数据类型

    a. 数据类型 i. 值类型:是一种由类型的实际值表示的数据类型,存储在栈内的存储空间中,由于编译器编译后将源代码中的值类型变量直接对应到唯一的存储空间上,直接访问该存储空间,故值类型的数据具有较快地 ...

  3. Protocol Buffers教程

    今天想比较下pb和fastjson两个序列化后的大小.再看了一下pb序列化 pb官网:https://developers.google.com/protocol-buffers/ pb是啥 What ...

  4. 文章点赞功能(Ajax)

    一.文章点赞样式构建 1.将base.html的css样式改为外部引入 将base.html的内嵌样式删除,改为使用 HTML 头部的 <head> 标签对中使用<link>标 ...

  5. Infor SyteLine创建一个数据维护窗口

    上次有在SyteLine解决一个问题<匹配与显示中文说明> http://www.cnblogs.com/insus/p/3396541.html .这些数据需要数据库管理员在数据库才能维 ...

  6. PhoneGap API介绍:Events

    事件类型: backbutton deviceready menubutton pause resume searchbutton online offline backbutton 当用户在Andr ...

  7. nginx配置+uwsgi+负载均衡配置

    nginx静态文件配置 location /static{ alias /var/www/myApp/static; } sudo mkdir -vp /var/www/myApp/static/ s ...

  8. CSS z-index的用法

    理清 position及z-index的用法: static :  无特殊定位,对象遵循HTML定位规则absolute :  将对象从文档流中拖出,使用left,right,top,bottom等属 ...

  9. SAP订单编排和流程增强概述

    SAP产品里的订单处理,无论是On-Premises解决方案还是云产品,我认为归根到底可以概括成四个字:订单编排,包含两个层次的内容: 1. 单个订单通过业务流程或者工作流驱动的状态迁移: 2. 多种 ...

  10. Android(java)学习笔记13:线程组的概述和使用

    1. Java中使用ThreadGroup来表示线程组,它可以对一批线程进行分类管理,Java允许程序直接对线程组进行控制. (1)默认情况下,所有的线程都属于主线程组. public final T ...