在Sequencial异步函数中尝试/捕获错误

时间:2019-07-05 13:37:31

标签: javascript

我有一系列异步函数可以解决或拒绝。此功能必须以正确的顺序执行,并且彼此依赖。因此,我使用了3个异步功能和一个try catch块。问题是,当我拒绝异步函数中的某些promise时,catch块不会得到在拒绝回调上发送的错误。如何获得拒绝时发送的错误? (下面的代码)

还是应该使用Promise链接?我想避免这种情况...

@Database(entities = [Pews::class], version = 1)
abstract class PewDatabase : RoomDatabase() {

    abstract fun pewDao() : PewDao
    companion object {

        @Volatile private var INSTANCE: PewDatabase? = null

        fun getInstance(context: Context): PewDatabase =
            INSTANCE ?: synchronized(this) {
                INSTANCE ?: buildDatabase(context).also { INSTANCE = it }
            }

        private fun buildDatabase(context: Context) =
            Room.databaseBuilder(context.applicationContext,
                PewDatabase::class.java, "sample_db")
                .allowMainThreadQueries()
                .build()
    }

}

2 个答案:

答案 0 :(得分:1)

您不需要try/catch。等待方法时,应使用Promise .catch

您也不需要return new Promise (...)

如果您的承诺被拒绝,它将进入该承诺的.catch,与常规catch不同。

您可以返回嵌套的承诺。

runMethods: () => {    
    return methods.methodOne()
            .then(() => methods.methodTwo())
            .then(output  => methods.methodThree(output))                     
}

答案 1 :(得分:0)

我通常是这样来的。

<dx:ASPxListBox ID="cbCuentaContable" 
                runat="server" 
                Height="400px" 
                SelectionMode="CheckColumn" 
                Caption="" 
                Width="80%" 
                RepeatColumns="1" 
                TextField="Price" 
                ValueField="id" 
                ValueType="System.Int32" 
                Border-BorderStyle="None">
   <CaptionSettings Position="Top" />
      <Columns>
        <dx:ListBoxColumn FieldName="Name" Caption="Model" Width="100%" />
        <dx:ListBoxColumn FieldName="Price" Width="50px" />
      </Columns>
      <FilteringSettings ShowSearchUI="true" />
      <ValidationSettings RequiredField-IsRequired="true" 
                          Display="Dynamic" 
                          ValidationGroup="datos" 
                          ErrorDisplayMode="ImageWithTooltip" 
                          CausesValidation="True">
          <RequiredField IsRequired="True" 
                         ErrorText="Se requiere al menos una cuenta contable"></RequiredField>
      </ValidationSettings>
</dx:ASPxListBox>