Promise 抛出错误
Promise throws errors
我收到以下错误:
{"__zone_symbol__currentTask":{"type":"microTask","state":"notScheduled","source":"Promise.then","zone":"angular","cancelFn":null,"runCount":0}}
我有一个 class 声明我正在调用一个 returns Promise 的方法....
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 上抛出错误,但我不明白为什么它没有正确命中 "then"。
作为一般规则,不要将异步的东西放在构造函数中。你不知道他们什么时候准备好。相反:
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));
}
}
我收到以下错误:
{"__zone_symbol__currentTask":{"type":"microTask","state":"notScheduled","source":"Promise.then","zone":"angular","cancelFn":null,"runCount":0}}
我有一个 class 声明我正在调用一个 returns Promise 的方法....
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 上抛出错误,但我不明白为什么它没有正确命中 "then"。
作为一般规则,不要将异步的东西放在构造函数中。你不知道他们什么时候准备好。相反:
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));
}
}