博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Bluebird-Core API(二)
阅读量:4500 次
发布时间:2019-06-08

本文共 4847 字,大约阅读时间需要 16 分钟。

.error

.error([function(any error) rejectedHandler]) -> Promise

和catch一样,但是catch捕获了所有错误类型的异常,而error捕获是操作异常

注:“errors”意为错误,作为对象能 够instanceof Error,不是字符串、数字等。See .

下面例子跟.catch模式恒等的

// Assumes OperationalError has been made globalfunction isOperationalError(e) {    if (e == null) return false;    return (e instanceof OperationalError) || (e.isOperational === true);}// Now this bit:.catch(isOperationalError, function(e) {    // ...})// Is equivalent to:.error(function(e) {    // ...});

For example, if a promisified function errbacks the node-style callback with an error, that could be caught with . However if the node-style callback throws an error, only .catch would catch that.

In the following example you might want to handle just the SyntaxError from JSON.parse and Filesystem errors from fs but let programmer errors bubble as unhandled rejections:

var fs = Promise.promisifyAll(require("fs"));fs.readFileAsync("myfile.json").then(JSON.parse).then(function (json) {    console.log("Successful json")}).catch(SyntaxError, function (e) {    console.error("file contains invalid json");}).error(function (e) {    console.error("unable to read file, because: ", e.message);});

Now, because there is no catch-all handler, if you typed console.lag (causes an error you don't expect), you will see:

Possibly unhandled TypeError: Object #
has no method 'lag' at application.js:8:13From previous event: at Object.
(application.js:7:4) at Module._compile (module.js:449:26) at Object.Module._extensions..js (module.js:467:10) at Module.load (module.js:349:32) at Function.Module._load (module.js:305:12) at Function.Module.runMain (module.js:490:10) at startup (node.js:121:16) at node.js:761:3

( If you don't get the above - you need to enable )

And if the file contains invalid JSON:

file contains invalid json

And if the fs module causes an error like file not found:

unable to read file, because:  ENOENT, open 'not_there.txt'

.finally

.finally(function() handler) -> Promise
.lastly(function() handler) -> Promise

传入一个句柄不管Promise结果如果都会执行,返回一个新的Promise,从.finally语义来说,这个句柄(handler)中最终值是不能修改的。

Note: using for resource management has better alternatives, see

Consider the example:

function anyway() {    $("#ajax-loader-animation").hide();}function ajaxGetAsync(url) {    return new Promise(function (resolve, reject) {        var xhr = new XMLHttpRequest;        xhr.addEventListener("error", reject);        xhr.addEventListener("load", resolve);        xhr.open("GET", url);        xhr.send(null);    }).then(anyway, anyway);}

This example doesn't work as intended because the then handler actually swallows the exception and returns undefinedfor any further chainers.

The situation can be fixed with .finally:

function ajaxGetAsync(url) {    return new Promise(function (resolve, reject) {        var xhr = new XMLHttpRequest;        xhr.addEventListener("error", reject);        xhr.addEventListener("load", resolve);        xhr.open("GET", url);        xhr.send(null);    }).finally(function() {        $("#ajax-loader-animation").hide();    });}

Now the animation is hidden but, unless it throws an exception, the function has no effect on the fulfilled or rejected value of the returned promise. This is similar to how the synchronous finally keyword behaves.

If the handler function passed to .finally returns a promise, the promise returned by .finally will not be settled until the promise returned by the handler is settled. If the handler fulfills its promise, the returned promise will be fulfilled or rejected with the original value. If the handler rejects its promise, the returned promise will be rejected with the handler's value. This is similar to throwing an exception in a synchronous finally block, causing the original value or exception to be forgotten. This delay can be useful if the actions performed by the handler are done asynchronously. For example:

function ajaxGetAsync(url) {    return new Promise(function (resolve, reject) {        var xhr = new XMLHttpRequest;        xhr.addEventListener("error", reject);        xhr.addEventListener("load", resolve);        xhr.open("GET", url);        xhr.send(null);    }).finally(function() {        return Promise.fromCallback(function(callback) {            $("#ajax-loader-animation").fadeOut(1000, callback);        });    });}

If the fade out completes successfully, the returned promise will be fulfilled or rejected with the value from xhr. If .fadeOutthrows an exception or passes an error to the callback, the returned promise will be rejected with the error from .fadeOut.

For compatibility with earlier ECMAScript version, an alias .lastly is provided for .

 

.bind

.bind(any|Promise
thisArg) -> BoundPromise
Same as calling .

转载于:https://www.cnblogs.com/xiaopen/p/5618066.html

你可能感兴趣的文章
PCL Examples
查看>>
spring boot
查看>>
浏览器URL传参最大长度问题
查看>>
学习进度条
查看>>
Linux crontab 定时任务详解
查看>>
string成员函数
查看>>
onSaveInstanceState()方法问题
查看>>
[转]CocoaChina上一位工程师整理的开发经验(非常nice)
查看>>
大数据时代侦查机制有哪些改变
查看>>
雷林鹏分享:jQuery EasyUI 菜单与按钮 - 创建链接按钮
查看>>
Apache Traffic Server服务搭建
查看>>
poj1990两个树状数组
查看>>
学习python-day1
查看>>
Delphi的命令行编译命令
查看>>
BZOJ 1901 Zju2112 Dynamic Rankings 题解
查看>>
C++虚析构函数
查看>>
《玩转.NET Micro Framework 移植-基于STM32F10x处理器》--微软中国.NET Micro Framework项目组工程师所作之序...
查看>>
php服务端搜索,功能改进
查看>>
unity, 在surface shader中访问顶点色
查看>>
Spring声明式事务配置
查看>>