情况就是这样。
数据库可以直接访问main.js中的nodejs(node-adodb)。我的Angular应用程序发送请求并从db.service接收sql结果。这部分工作正常,但如果我有一个像getInfo()这样的函数,第一个返回的promise将是第二个请求的值。您如何建议我处理这种情况以避免冲突?
是的,我可以等待第一个电话返回,然后再做下一个电话,但你认为可以采取不同的方式吗?
提前致谢
这是代码
main.js
ipcMain.on('item:select', (event, sql) => {
connection
.query(sql)
.on('done', function (data) {
event.sender.send('async-reply', data);
})
.on('fail', function (error) {
event.sender.send("async-reply", error);
});
});
db.service.ts
select(sql: string): Promise<any> {
return new Promise((resolve, reject) => {
ipcRenderer.send('item:select', sql);
ipcRenderer.on('async-reply', (event, result) => {
resolve(result);
});
});
user.ts
getInfo() {
this.userService
.getUsers()
.then((value: User[]) => this.users = value);
this.userService
.getUserTypes()
.then((value: UserType[]) => this.userType = value);
}
答案 0 :(得分:1)
这是我使用的解决方案:
main.js
ipcMain.on('select', (event, type, sql) => {
const reply = 'reply-select-' + type;
connection = ADODB.open('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=mydb.mdb;');
connection
.query(sql)
.then((data) => {
event.sender.send(reply, { status: 0, message: '', data: data });
})
.catch((error) => {
event.sender.send(reply, { status: 1, message: error.message, data: {} });
});
});
db.service.ts
select(sql: string, selectItem: string): Promise<DbStatus> {
return new Promise((resolve, reject) => {
ipcRenderer.send('select', selectItem, sql);
ipcRenderer.on('reply-select-' + selectItem, (event, result: DbStatus) => {
resolve(result);
});
});
}