angular - 如何处理2 ipcRenderer.send调用到1 ipcMain.on

标签 angular electron

这是情况。

可通过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);
    });
  });

用户名
getInfo() {
  this.userService
    .getUsers()
    .then((value: User[]) => this.users = value);

  this.userService
    .getUserTypes()
    .then((value: UserType[]) => this.userType = value);
}

最佳答案

这是我使用的解决方案:

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);
      });
    });
  }

关于angular - 如何处理2 ipcRenderer.send调用到1 ipcMain.on,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47306708/

相关文章:

Angular 2元素动态引用

javascript - 从服务器发送请求时发生合并映射错误

angular - compodoc:找不到命令

javascript - 使用 Electron 时关闭所有应用程序窗口

reactjs - Electron-builder 错误 - fatal error : Unable to commit changes

javascript - 设置和运行 Electron + React + Typescript + Webpack 应用程序时出现问题

php - 带有在线服务器和数据库的 Electron 桌面应用程序?

javascript - 我在 for 循环内得到相同的对象以进行 Angular 修改

angular - 以 Angular 2/4 更改属性时创建过渡

javascript - Warning : flattenChildren(. ..): Encountered two children with the same key/Child keys must be unique