2017-08-25 15 views
0

私はgetterMethodで非同期呼び出しをどのようにして動作させるかを調べようとしています。目標は私がモデルwalletを持っており、財布は多くの場合walletTransactionsを持つことができるということです。目標は、walletsが照会されたときに、「balance」という名前の仮想フィールドを送信することです。非同期getterMethods続行

私は次のことを試してみました:

getterMethods: { 
     balance: function() { 
     return this.getWalletTransactions() 
     .then((transactions) => { 
      var balance = 0; 
      transactions.forEach((value) => { 
      balance = balance + value.amount; 
      }) 
      return balance; 
     }) 
     } 
    } 

しかし、任意の運なし。結果:

enter image description here

私が間違っているのか?

+0

あなたは 'getterMethods.balance'関数を呼び出すにはどうすればよいですか? – alexmac

+0

Wallet.find() - 特別なものなし – Tino

+0

この呼び出しの_result_をどのように使用しますか?単に 'let = Wallet.find(); console.log(res); '? – alexmac

答えて

0

ここでできることは、ゲッターに約束を返すことです。問題は、プロパティーbalanceが数字であることが予想されるかもしれないが、実際にはその数字の約束であるということです。

あなたがやっている正確に何をすべきかとyourInstance.balance.then(theThingYouWant => { /* ... */ });

を言う。しかし、これは非常に設立されたパターンではありませんすることができます。

0

getterMethodは、プロミスを実行して解決された値をモデルインスタンスに返すことができないため、同期しています。

しかし、あなたのユースケースに応じて、あなたはafterFindフックにネクタイと非同期操作を実行することができる場合があります

const Wallet = db.define('wallet', {...}, { 
    hooks: { 
    afterFind: instances => { 
     // instances is an array for the list view or an object for the detail view. 
     if (Array.isArray(instances)) { 
     performAsyncOperation() 
      .then(data => { 
      // loop over instances 
      });   
     } else { 
     performAsyncOperation() 
      .then(data => { 
      instances.dataValues.someNewProp = data.someField 
      });   
     } 
    } 
    } 
});