今天在网上查看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. Android开发_如何调用系统默认浏览器访问

    Android开发_如何调用系统默认浏览器访问 2015-10-20 17:53 312人阅读  http://blog.sina.com.cn/s/blog_6efce07e010142w7.htm ...

  2. FZU 2214 ——Knapsack problem——————【01背包的超大背包】

    2214 Knapsack problem Accept: 6    Submit: 9Time Limit: 3000 mSec    Memory Limit : 32768 KB  Proble ...

  3. Java Mail邮件发送的简单实现

    1.什么是java mail JAVA MAIL是利用现有的邮件账户发送邮件的工具,通过JAVA Mail的操控,让程序自动的使用设置的邮箱发送邮件. 这一机制被广泛的用在注册激活和垃圾邮件的发送等方 ...

  4. Android界面编程--使用活动条(ActionBar)--通过ActionBar菜单改变TextView的字体和颜色

    android:orientation="vertical"(AndroidStudio不提示,这个要记住了) 昨天好不容易把ActionBar从溢出菜单overflow中弄出来了 ...

  5. 天气小雨, 心情多云, 练习标准的键盘ABC打法

    今天看到饿了么转型生活做千亿美元公司 突然想到一些就写下来 当时外卖一份8元 10元的年代那个开心啊 很久以前宁可跑个远, 都不愿意叫外卖 叫了大概1年的外卖了, 之前还感到便宜多样, 现在感觉到的是 ...

  6. 001Angular2环境准备

    01.安装Node.js 和 npm 安装完成后,在命令行依次使用node -v 和 npm -v可以看到版本号. 02.安装cnpm npm需要连接谷歌服务器,国内不能正常使用,需安装cnpm.命令 ...

  7. Myeclipse中进行JUnit单元测试

    最近学习了在myeclipse中进行单元测试,写点东西总结总结. JUnit单元测试: 测试对象为一个类中的方法. juint不是javase中的部分,所以必须导入jar包,但是myeclipse自带 ...

  8. SharePoint Tricks - HTML & CSS & JavaScript

    1. 隐藏Quick Launch <style type="text/css">/*-- Hide Quick Launch --*/#s4-leftpanel{   ...

  9. check_mk的性能案例

    http://wiki.lustre.org/Check_MK/Graphite/Graphios_Setup_Guide Dell PowerEdge R515 2x 8-Core AMD Opte ...

  10. MFC 鼠标事件

    1. 新建项目 项目名称:MFCBaseMessage 2. 选择基本对话框模式,如图 ,点击完成3. 最终如图 4.右键添加类向导   5.添加鼠标事件 6.在ON_LButtonDown添加如下代 ...