成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

Bluebird warning 解釋說明[譯]

whjin / 776人閱讀

摘要:從開始對的錯誤使用會有以下三種,提醒你正在不正確使用,下面對這三種進行解釋,并說明如何避免。因為標(biāo)準(zhǔn)規(guī)定對待錯誤使用時不予理睬。一個錯誤是一個繼承于的對象。例如因為在第一個里面,沒有作為結(jié)果,導(dǎo)致第二個認(rèn)為并立即執(zhí)行因為沒有聲明默認(rèn)返回。

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作為參數(shù)

如果你看到這樣的提醒,說明你的代碼運行結(jié)果不符合你的預(yù)期。最主要原因是傳個.then()的參數(shù)是一個函數(shù)的執(zhí)行結(jié)果,而不是函數(shù)本身。

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

getImage().then(processImage());

上面的方法就是調(diào)用processImage()然后立刻將返回結(jié)果傳給.then().這里傳給.then()的參數(shù)就是undefined。
為解決這個問題,只要給.then()傳函數(shù)就可以了,就像這樣:

getImage().then(processImage)

如果你有疑問為什么這里不直接簡單粗暴地拋出TypeError,而是一個warning。因為Promises/A+標(biāo)準(zhǔn)規(guī)定對待錯誤使用時不予理睬。

Warning: a promise was rejected with a non-error
Warning: 一個promise拒絕時拋出了一個非Error值

由于JavaScript的歷史錯誤,throw可以拋出任何類型的值。Promises/A+選擇繼續(xù)沿用這個錯誤,所以promise是可以拋出一個非Error類型的值。

一個錯誤是一個繼承于Error的對象。它至少需要有.stack.message屬性。因為錯誤通常會被根據(jù)它的不同來源而被分成不同等級,所以一個錯誤需要包含足夠的信息,以讓高級別的handler擁有足夠的信息來生成一份有用的高級的錯誤報告。

因為所有的對象都支持擁有屬性,你可能還會有疑問說,為什么一定要是一個Error對象而不能是一個普通的對象。一個錯誤對象除了要有這些屬性,還有一個同樣重要的特性就是自動采集stack trace。有了stack trace你才能容易的找到錯誤的來源。

你最好處理下這些warning,因為一個被拒絕的promise返回一個非Error,會導(dǎo)致調(diào)試非常艱難并且高成本。另外如果你拒絕一個promise只是使用最簡陋的調(diào)用reject(),這樣你就沒辦法處理錯誤了,而且你只能告訴用戶“有地方出錯了”。

Warning: a promise was created in a handler but none were returned from it
Warning: 你創(chuàng)建了一個沒有返回結(jié)果的promise

這通常說明你只是單單地忘記了聲明return,但卻導(dǎo)致了該promise丟失,從而無法關(guān)聯(lián)到promise鏈中。
例如:

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

因為在第一個then里面,getUserData(user)沒有作為結(jié)果return,導(dǎo)致第二個then認(rèn)為userData=undefined并立即執(zhí)行(因為沒有聲明return默認(rèn)返回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) {
    // 后臺執(zhí)行,不在乎運行結(jié)果
    saveAnalytics(user);
    // 返回一個非`undefined`的值,表示我們并沒有忘記return
    return null;
});

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

推薦閱讀:Bluebird promise 設(shè)置

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/86270.html

相關(guān)文章

  • Bluebird promise 設(shè)置

    摘要:可設(shè)置長堆棧跟蹤警告監(jiān)控和取消。注意雖然這里默認(rèn)值都是,但是在開發(fā)環(huán)境下自動會開啟堆棧跟蹤和警告。你可以對單獨設(shè)置檢查忘記聲明的警告開啟所有警告除了檢查是警告屬性中唯一一個可以單獨拆分設(shè)置的屬性。 Promise.config(Object { warnings: boolean=false, longStackTraces: boolean=false, ca...

    bluesky 評論0 收藏0
  • [] 深入理解 Promise 五部曲:4. 擴展問題

    摘要:有一個和相關(guān)的更大的問題。最后,請負(fù)有責(zé)任感并且使用安全的擴展。深入理解五部曲異步問題深入理解五部曲轉(zhuǎn)換問題深入理解五部曲可靠性問題深入理解五部曲擴展性問題深入理解五部曲樂高問題最后,安利下我的個人博客,歡迎訪問 原文地址:http://blog.getify.com/promis... 現(xiàn)在,我希望你已經(jīng)看過深入理解Promise的前三篇文章了。并且假設(shè)你已經(jīng)完全理解Promises...

    Shimmer 評論0 收藏0
  • JavaScript 異步

    摘要:從最開始的到封裝后的都在試圖解決異步編程過程中的問題。為了讓編程更美好,我們就需要引入來降低異步編程的復(fù)雜性。寫一個符合規(guī)范并可配合使用的寫一個符合規(guī)范并可配合使用的理解的工作原理采用回調(diào)函數(shù)來處理異步編程。 JavaScript怎么使用循環(huán)代替(異步)遞歸 問題描述 在開發(fā)過程中,遇到一個需求:在系統(tǒng)初始化時通過http獲取一個第三方服務(wù)器端的列表,第三方服務(wù)器提供了一個接口,可通過...

    tuniutech 評論0 收藏0
  • [] 理解 PHP 內(nèi)部函數(shù)的定義(給PHP開發(fā)者的PHP源碼-第二部分)

    摘要:文章來自原文歡迎來到給開發(fā)者的源碼系列的第二部分。是在內(nèi)部代表任意一個變量的定義。這種情況下函數(shù)會拋出警告,而此函數(shù)馬上返回會返回給的用戶層代碼。原因是,是少數(shù)通過而不是擴展定義的函數(shù)。下一部分下一部分會再次發(fā)表在。 文章來自:http://www.hoohack.me/2016/02/10/understanding-phps-internal-function-definitio...

    hizengzeng 評論0 收藏0
  • 實現(xiàn)一個符合標(biāo)準(zhǔn)的Promise

    摘要:不同的的實現(xiàn)需要可以相互調(diào)用,搞清楚了標(biāo)準(zhǔn)之后,開始動手吧構(gòu)造函數(shù)產(chǎn)生一個對象有很多種方法,構(gòu)造函數(shù)是看起來最面向?qū)ο蟮囊环N,而且原生實現(xiàn)也是使用的構(gòu)造函數(shù),因此我也決定使用構(gòu)造函數(shù)的方法。 -- What i cant create, i dont understant 前言 實現(xiàn)Promise的目的是為了深入的理解Promies,以在項目中游刃有余的使用它。完整的代碼見gitHub...

    yuanzhanghu 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<