Javascript “等待返回”的替代选项对于等待某些结果时必须返回的情况
我知道ESLint/TSLint rulest不能在100%的情况下“正确”。然而,我需要决定哪些规则我真的不需要 在ElectronJS中,不建议在渲染器进程中使用Node.js模块。相反,渲染器进程应该向主进程发送请求并侦听响应。下面的TypeScript类负责这个例程。(我希望我的变量名使代码不需要注释,但这些很难理解,请在注释中告诉我)Javascript “等待返回”的替代选项对于等待某些结果时必须返回的情况,javascript,node.js,typescript,asynchronous,async-await,Javascript,Node.js,Typescript,Asynchronous,Async Await,我知道ESLint/TSLint rulest不能在100%的情况下“正确”。然而,我需要决定哪些规则我真的不需要 在ElectronJS中,不建议在渲染器进程中使用Node.js模块。相反,渲染器进程应该向主进程发送请求并侦听响应。下面的TypeScript类负责这个例程。(我希望我的变量名使代码不需要注释,但这些很难理解,请在注释中告诉我) 从“electron”导入{ipcRenderer as ipcRenderer}; 从“@ProjectInitializer:Root/InterP
从“electron”导入{ipcRenderer as ipcRenderer};
从“@ProjectInitializer:Root/InterProcessDataTransferProtocol”导入InterProcessDataTransferProtocol;
导入CheckingPathForWriteAccess=进程间数据传输协议。CheckingPathForWriteAccess;
导入MainProcessEvents=InterProcessDataTransferProtocol.MainProcessEvents;
导入超时=NodeJS.Timeout;
导出默认抽象类进程间协调器{
私有静态只读是\路径\可写\响应\等待\周期\毫秒:数字=10000;
公共静态异步请求CheckingPathForAccessToWrite(targetPath:string):承诺{
ipc.send(
InterProcessDataTransferProtocol.RenderProcessEvents.checkingPathForWriteAccessRequestSent,
{targetPath}
);
const responseWaitingTimeout:Timeout=setTimeout(
()=>{抛出新错误(“主进程无响应”);},
InterProcessFaciliator.IS\u路径\u可写\u响应\u等待\u周期\u毫秒
);
return等待新承诺((resolve:(isWritable:boolean)=>void):void=>{
伊普顿(
MainProcessEvents.checkingPathForWriteAccessDone,
(_event:Electron.event,responsePayload:CheckingPathForWriteAccess.responsePayload)=>
{
clearTimeout(responseWaitingTimeout);
if(responsePayload.targetPath===targetPath){
解析(responsePayload.iswrited);
}
});
});
}
}
目前,方法requestCheckingPathForAccessToWrite
违反了ESLint规则。但是,它可以用作:
async function checkTheDefaultPathForWrightPermission(): Promise<void> {
try {
const pickedPathIsWritable: boolean = await InterProcessFacilitator
.requestCheckingPathForAccessToWrite(DEFAULT_PATH);
pickedPathIsWritable ?
this.relatedStoreModule.reportAboutUnableToWriteToDirectoryErrorResolution() :
this.relatedStoreModule.reportAboutUnableToWriteToDirectoryErrorOccurrence();
} catch (error) {
console.error(`unable to check wright permission for path ${DEFAULT_PATH}`);
console.error(error);
}
}
异步函数检查DefaultPathForWrightPermission():Promission{
试一试{
常量pickedPathIsWritable:boolean=等待进程间连接
.requestCheckingPathForAccessToWrite(默认路径);
pickedPathIsWritable?
此.relatedStoreModule.ReportAboutAboutEnableToWriteToDirectoryErrorResolution():
this.relatedStoreModule.ReportAboutableToWriteToDirectoryErrorOccurrence();
}捕获(错误){
错误(`无法检查路径${DEFAULT_path}`的权限');
控制台错误(error);
}
}
来自ESLint文档:
在异步函数中,return-await很少有用。自从
异步函数的返回值始终包装在
Promise.resolve,return wait实际上除了add之外什么都不做
在总体承诺解决或拒绝之前的额外时间。这个
唯一有效的例外是在try/catch中使用returnawait
语句捕获另一个基于承诺的函数的错误
你能批评我的解决方案或这条ESLint规则吗?在第一种情况下,建议重构?因为它不是在同一块中,你就不能回报承诺吗?只需卸下
等待
?我认为这会导致与你目前的行为相同的行为code@CertainPerformance,谢谢你的回答。你说得对,等待
在这里是不必要的。而这个案例也证明了规则是障碍。