Java语言如何在扩展错误内等待承诺
我目前正尝试针对过程问题扩展javascript的标准Error类,更确切地说,我想在抛出customError时检查FTP数据。问题在于,它永远不会在抛出之前等待await函数完成。等待的函数也返回一个Promise。
就我而言,我已经为我的班级准备了这个示例代码,请注意,remoteFs只是一个自定义模块,其中包含用于操作远程FTP数据的函数。
module.exports = class processError extends Error { constructor(args) { super(args); this.name = "customError" this._folder = "./test/" this._credentials = { host: 'my.host', user: 'username', password: 'passwd123', } return (this._errorProcess()); } async _errorProcess () { try { // The function below is basic FTP list and should return a promised true/false if the folder exists or not. let IsThereFolder = await remoteFs.EntityExist(this._credentials, this._folder) } catch (err) { throw new Error("Fatal error in error handler:", err) } console.log("Should I create folder ?", IsThereFolder ) return (this); } }
我尝试了几种使构造函数等待的方法,例如从init()函数调用_errorProcess,该函数在从构造函数调用后将返回它。我也试图将这个函数放到类范围之外,但是似乎没有任何正常工作,在收到我的诺言之前,我总是最终会抛出结果。
module.exports = { EntityExist: function (credentials, toFind) { var c = new Client(); let entityExist = false; return new Promise((resolve, reject) => { console.log("CREDENTIALS ->", credentials) c.on('ready', function () { console.log("Connection established"); c.on('error', function (err) { console.log(err); reject(err); }) c.list(toFind, (err, list) => { if (err) throw err; for (let i = 0; i < list.length; i++) { if (list[i].name == toFind) { entityExist = true; } } c.on('end', () => { resolve(entityExist); }) c.end(); }); }); console.log("Before connect") c.connect(credentials); }) } };
这是执行此命令时得到的实际输出:
CREDENTIALS -> { host: 'my.host', user: 'username', password: 'passwd123' } Before connect C:\path_to_project\includes\file.js:62 throw new handleError("Testing custom error: " + err); break; ^ [object Promise] npm ERR! code ELIFECYCLE npm ERR! errno 1 (...)
因此,您可以看到,它不等待诺言再次出现,甚至没有到达EntityExist函数上的“已建立连接”日志(请注意,该函数在其他情况下不能正常工作。)>]
实际上,我什至不知道是否有可能直接从构造函数执行此类操作。我希望上下文足够清楚,感谢您的宝贵时间!
我目前正尝试针对过程问题扩展javascript的标准Error类,更确切地说,我想在抛出customError时检查FTP数据。问题是它永远不会等待...
回答如下:等待操作符用于等待Promise。它只能在异步函数中使用。