Bluebird warning 诠释申明[译]

bluebird从3.x最先对promise的毛病运用会有以下三种Warning,提示你正在不正确运用bluebird,下面临这三种warning举行诠释,并申明怎样防止。

  • Warning: .then() only accepts functions

  • Warning: a promise was rejected with a non-error

  • Warning: a promise was created in a handler but none were returned from it

Warning: .then() only accepts functions

Warning: .then要领只接收function作为参数

假如你看到如许的提示,申明你的代码运转效果不符合你的预期。最主要原因是传个.then()的参数是一个函数的实行效果,而不是函数自身。

function processImage(image) {
    // Code that processes image
}

getImage().then(processImage());

上面的要领就是挪用processImage()然后马上将返回效果传给.then().这里传给.then()的参数就是undefined
为处置惩罚这个题目,只要给.then()传函数就能够了,就像如许:

getImage().then(processImage)

假如你有疑问为何这里不直接简朴粗犷地抛出TypeError,而是一个warning。因为Promises/A+规范划定看待毛病运用时不予理睬。

Warning: a promise was rejected with a non-error

Warning: 一个promise谢绝时抛出了一个非Error值

因为JavaScript的汗青毛病,throw能够抛出任何范例的值。Promises/A+挑选继续相沿这个毛病,所以promise是能够抛出一个非Error范例的值。

一个毛病是一个继续于Error的对象。它最少须要有.stack.message属性。因为毛病一般会被依据它的差别泉源而被分红差别品级,所以一个毛病须要包括充足的信息,以让高等别的handler具有充足的信息来天生一份有效的高等的毛病报告。

因为一切的对象都支撑具有属性,你能够还会有疑问说,为何肯定如果一个Error对象而不能是一个一般的对象。一个毛病对象除了要有这些属性,另有一个一样主要的特征就是自动收集stack trace。有了stack trace你才轻易的找到毛病的泉源。

你最好处置惩罚下这些warning,因为一个被谢绝的promise返回一个非Error,会致使调试异常困难而且高本钱。别的假如你谢绝一个promise只是运用最大略的挪用reject(),如许你就没办法处置惩罚毛病了,而且你只能通知用户“有处所出错了”。

Warning: a promise was created in a handler but none were returned from it

Warning: 你创建了一个没有返回效果的promise

这一般申明你只是单单地遗忘了声明return,但却致使了该promise丧失,从而没法关联到promise链中。
比方:

getUser().then(function(user) {
    getUserData(user);
}).then(function(userData) {
    // userData is undefined
});

因为在第一个then内里,getUserData(user)没有作为效果return,致使第二个then以为userData=undefined并马上实行(因为没有声明return默许返回undefined)。

处置惩罚这个题目,你只须要return这个promise:

getUser().then(function(user) {
    return getUserData(user);
}).then(function(userData) {
    // userData is the user's data
});

假如你晓得你在做什么,而且不想看到warning,你只须要随意返回点什么,比方null

getUser().then(function(user) {
    // 背景实行,不在乎运转效果
    saveAnalytics(user);
    // 返回一个非`undefined`的值,示意我们并没有遗忘return
    return null;
});

原文链接:http://bluebirdjs.com/docs/warning-explanations.html

引荐浏览:Bluebird promise 设置

    原文作者:吴彦欣
    原文地址: https://segmentfault.com/a/1190000004559403
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞