亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

ES6承諾解決回調嗎?

ES6承諾解決回調嗎?

精慕HU 2019-09-26 14:52:39
無論我的Promise是否成功解決,我都想執行相同的操作。我不想將相同的功能綁定到兩個參數.then。沒有.always像jQuery一樣的東西嗎?如果沒有,我該如何實現?ES6承諾解決回調嗎?
查看完整描述

3 回答

?
繁華開滿天機

TA貢獻1816條經驗 獲得超4個贊

沒有.always像jQuery一樣的東西嗎?

不,還沒有。盡管有一個積極的提案,但ES2018也許如此。

如果沒有,我該如何實現?

您可以這樣實現finally自己的方法:

Promise.prototype.finally = function(cb) {
    const res = () => this
    const fin = () => Promise.resolve(cb()).then(res)
    return this.then(fin, fin);};

或更廣泛地講,將解析信息傳遞給回調:

Promise.prototype.finally = function(cb) {
    const res = () => this
    return this.then(value =>
        Promise.resolve(cb({state:"fulfilled", value})).then(res)
    , reason =>
        Promise.resolve(cb({state:"rejected", reason})).then(res)
    );};

兩者都確保原始解析得以維持(當回調中沒有異常時),并確保等待諾言。


查看完整回答
反對 回復 2019-09-26
?
偶然的你

TA貢獻1841條經驗 獲得超3個贊

使用async / await,可以將await與結合使用try/finally,如下所示:

async function(somePromise) {
  try {
    await somePromise();
  } finally {
    // always run this-- even if `somePromise` threw something
  }}

這是我使用Babel的異步生成器插件在Node中進行生產的一個真實示例。

// Wrap promisified function in a transaction blockexport function transaction(func) {
  return db.sequelize.transaction().then(async t => {
    Sequelize.cls.set('transaction', t);
    try {
      await func();

    } finally {
      await t.rollback();
    }
  });}

我在Mocha測試中和Sequelize ORM一起使用此代碼來啟動數據庫事務,并且無論測試中數據庫調用的結果如何,總是在最后回滾。

這大致類似于Bluebird的.finally()方法,但是IMO,語法好得多!

:在你想知道為什么我不區分await第一承諾-荷蘭國際集團是Sequelize的實現細節它使用。CLS為“捆綁” SQL事務的無極鏈凡是招,里面同樣鏈因此,在Promise上等待將“關閉”交易區塊并破壞了鏈條,我舉了這個示例向您展示如何將“香草” Promise處理與異步功能混合使用,并一起玩。)


查看完整回答
反對 回復 2019-09-26
?
繁星coding

TA貢獻1797條經驗 獲得超4個贊

如果您不/不能更新原型,那么破解a的方法是:

executeMyPromise().then(function(res){ return {res: res}; }).catch(function(err){ return {err: err}; }).then(function(data) {
    // do finally stuff
    if (data.err) {
        throw data.err;
    }
    return data.res;}).catch(function(err) {
    // handle error});


查看完整回答
反對 回復 2019-09-26
  • 3 回答
  • 0 關注
  • 391 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號