2017-06-21 85 views
0

我收到以下错误:无极抛出错误

{"__zone_symbol__currentTask":{"type":"microTask","state":"notScheduled","source":"Promise.then","zone":"angular","cancelFn":null,"runCount":0}}

我有一个类中声明,我调用返回一个无极的方法....

export class TechPRODAO { 
sqlite: any; 
db: SQLiteObject; 

constructor() { 
    this.sqlite = new SQLiteMock(); 

    this.sqlite.create({ 
     name: 'techpro.db', 
     location: 'default' 
    }).then((_db: SQLiteObject) => { 
     this.db = _db; 
    }); 
}; 

public executeSql(sqlstatement: string, parameters: any): Promise<any> { 

    return this.db.executeSql(sqlstatement, parameters); 
} 

这里就是我拨打电话

export class AppointmentDAO { 
techprodao: TechPRODAO; 

constructor(_techprodao: TechPRODAO) { 
    this.techprodao = _techprodao; 
}; 

public insertAppointment(appointment: Appointment) { 
    console.log("insertAppointment called"); 
    this.techprodao.executeSql("INSERT INTO appointment (ticketnumber, customername, contactemail, contactphone, status, location, paymenttype, description, hascontract) " + 
     "VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)", [appointment.ticketnumber, appointment.customername, appointment.contactemail, appointment.contactphone, appointment.status, 
      appointment.location, appointment.paymenttype, appointment.description, appointment.hascontract]) 
     .then((data) => { 
      console.log("Inserted into appointment: ticketnumber=" + appointment.ticketnumber); 
     }, (error) => { 
      console.log("ERROR in insertAppointment: " + JSON.stringify(error)); 
     }); 
} 

insertAppointment在executeSql上抛出错误,但我不明白为什么它没有打那么“正确”。

+0

您应该检查以确保该事件未被多次触发。 – Ahmad

回答

1

作为一般规则,不要在构造函数中放置异步事物。你什么时候准备好都不知道。相反:

export class TechPRODAO { 
    sqlite: any; 
    db: Promise<SQLiteObject>; 

    constructor() { 
    this.sqlite = new SQLiteMock(); 

    this.db = this.sqlite.create({ 
     name: 'techpro.db', 
     location: 'default' 
    }); 
    } 

    public executeSql(sqlstatement: string, parameters: any): Promise<any> { 
    return this.db.then(db => executeSql(sqlstatement, parameters)); 
    } 
} 
+0

我会命名属性'createdDb'而不是'db'。所以它读取'this.createdDb.then(db => ...)' – unional

+0

我仍然收到相同的错误。 – Adam