今天在网上查看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. hdu 5242——Game——————【树链剖分思想】

    Game Time Limit:1500MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status  ...

  2. java File delete()执行失败原因(转)

    java.io.File里的delete操作很实用也很常用,可以用来删除单独的文件和某一目录.但有时候会出现delete失败的情况,出现这种情况的原因一般有以下几种:1.删除时还有其他程序在使用该文件 ...

  3. [转]NLog Layout Renderers ${}

    https://github.com/nlog/NLog/wiki/Layout-Renderers Layout renderers are template macros that are use ...

  4. GridView .net访问

    HTML code <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns=&qu ...

  5. android JNI学习之一

    执行System.loadLibrary()函数时,VM会反向调用*.so里的JNI_OnLoad()函数.用途有二:1. VM询问此*.so使用的JNI版本编号.2. VM要求*.so做一些初期设定 ...

  6. IE9下JQuery发送ajax请求失效

    最近在做项目的时候,测试PC端网页,在IE9下会失效,不能正常的发送POST请求,经过仔细的排查,发现是IE9下JQuery发送ajax存在跨域问题. 目前有两种解决方案:   解决方案一: 设置浏览 ...

  7. servlet中this.getServletContext(); this.getServletConfig().getServletContext(); 的区别

    WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前web应用.ServletConfig对象中维护了ServletContext对象的引用,开发人 ...

  8. 给HTML拍个照(如何将html元素转成图片)

    本文主要介绍一款好用的库,如何将HTML生成图片. 1.简述 最近在做的项目中,需要将界面转换成模板保存下来,本来想使用自适应布局完成,但是页面较复杂,模板较多,生成的模板使用过多的HTML标签,于是 ...

  9. UITableViewCell 分割线如何满屏

    在iOS7中,UITableViewCell左侧会有默认15像素的空白.设置setSeparatorInset:UIEdgeInsetsZero 能将空白去掉. 但是在iOS8中,设置setSepar ...

  10. java调用c#dll文件配置

    1 在强大的c#语言和java语言之间,二者难免会因为某些特殊的要求会相互调用. 下面就以java调用c#的dll为例做详细介绍 1  在vs中的环境设置如下图,图片中程序仅作为讲解程序,在项目编译成 ...