如何在发送响应之前等待进程终止
我正在和Electron合作,我正在使用三页。我发送请求的Index.html
,处理请求的Main.js
和创建了一些长异步函数的Page.js
。
我的问题是我不知道如何使主文件等待Page.js
进程完成后再将响应发送到html页面。
我试图使用一个承诺将数据发送回html,但我得到一个错误,因为它说.then()
函数不是一个函数。
的index.html
document.querySelector('#formhomepage').addEventListener('submit', function(e) {
e.preventDefault();
let date = document.getElementById("date-input").value;
const {ipcRenderer} = require('electron')
// send InputDate to main.js
ipcRenderer.send('asynchronous-message', date )
// receive output from main.js
ipcRenderer.on('asynchronous-reply', (event, arg) => {
console.log(arg);
document.getElementById('results').innerHTML = arg;
});
});
Main.js
ipcMain.on('asynchronous-message', (event, inputDate) => {
var excel_n1 = require('./page.js');
excel_n1(inputDate).then(result => event.sender.send('asynchronous-reply', result ) )
.catch(error => {console.log("error")});
});
page.js
module.exports = async function(inputDate){
// long await function with a lot of async and await
}
回答如下:
在您的page.js
中,您的承诺应该类似于以下内容
module.exports = function(inputDate){
return new Promise(async(resolve, reject) => {
try{
...your code
resolve(response);
} catch (e) {
reject(e.message)
}
})
}