0

我想在两次(多次)ipcRenderer.on()触发后调用回调函数。我厌倦了这个...

(async () => {
  await ipcRenderer.on('all-items-data-fetched', (event, data) => {
    itemData = data;    
  });  
  await ipcRenderer.on('all-groups-data-fetched', (event, data) => {
    data.forEach((el) => {
      groupObj[el.id] = el.name;
    
      const option = document.createElement('option');
      option.value = el.id;
      option.textContent = el.name;
      underGroup.appendChild(option);
    });
  });
})()
.then(() => { console.log(itemData);
  dataTable.clear().draw();

  itemData.forEach((el) => {  
    itemNames.push(el.name);
    el.groupId = groupObj[el.groupId];
    dataTable.row.add(el).draw();
  });

  table.querySelectorAll('button').forEach((el) => {
    el.addEventListener('click', tableActions);
  });
});

但不起作用,我希望首先两个 IPC 事件ipcRenderer.on('all-items-data-fetched', (event, data) => {...}并且ipcRenderer.on('all-groups-data-fetched', (event, data) => {...}应该触发然后调用回调函数。我怎样才能做到这一点?

4

1 回答 1

0

你可以使用承诺。

const listener1 = Promise.resolve(ipcRenderer.on('all-items-data-fetched', (event, data) => {...})
const listener2 = Promise.resolve(ipcRenderer.on('all-groups-data-fetched', (event, data) => {...})

Promise.all([listener1, listener2])
                .then((values) => callback_function)
//values will be an array with value[0] and value[1] corresponding responses of listener1 and 2
于 2021-05-05T18:02:25.930 回答