捕获 Promise 中的错误并拒绝 Promise
Catching Errors Inside Promises and Rejecting Promise
我编写了一个函数,return承诺异步逐行读取文件,但问题是如果文件不存在,则会引发错误并且应用程序崩溃。我已经将代码包围在 try catch 块中,但代码执行从未进入 catch 块而是终止了。
其次,我可以拒绝承诺,然后 return 来自承诺的 json 对象吗?
喜欢reject({success: false});
const fs = require('fs');
const readline = require('readline');
class fileParser{
readPolicyFile = function(filePath, fileName) {
return new Promise((resolve, reject) => {
try {
let response = {};
let readInterface = readline.createInterface({
input: fs.createReadStream(`${filePath}/${fileName}`),
terminal: false
});
readInterface
.on('line', line => {
// Do processing here to create the response
})
.on('close', () => {
resolve(response);
});
} catch(err){
console.log("Inside catach block");
reject(err);
}
})
}
}
module.exports = new fileParser();
你永远不会看到 Inside catach block
行,
因为 createReadStream
不会像“正常”那样抛出错误。
当它想抛出错误时,它会发出 error
事件。
您需要的是 createReadStream
的句柄 error
(不是 readInterface
)
const fs = require('fs');
const readline = require('readline');
class fileParser {
readPolicyFile = function (filePath, fileName) {
return new Promise((resolve, reject) => {
let response = {};
// create a stream and handle it's error event
const stream = fs.createReadStream(`${filePath}/${fileName}`);
stream.on('error', (error) => {
reject(error);
// or reject({success: false}), but why call reject with data
// If you don't want to handle error of readPolicyFile function, just call resolve({success: false})
});
let readInterface = readline.createInterface({
input: stream,
terminal: false
});
readInterface
.on('line', line => {
// Do processing here to create the response
})
.on('close', () => {
resolve(response);
});
})
}
}
module.exports = new fileParser();
我编写了一个函数,return承诺异步逐行读取文件,但问题是如果文件不存在,则会引发错误并且应用程序崩溃。我已经将代码包围在 try catch 块中,但代码执行从未进入 catch 块而是终止了。
其次,我可以拒绝承诺,然后 return 来自承诺的 json 对象吗?
喜欢reject({success: false});
const fs = require('fs');
const readline = require('readline');
class fileParser{
readPolicyFile = function(filePath, fileName) {
return new Promise((resolve, reject) => {
try {
let response = {};
let readInterface = readline.createInterface({
input: fs.createReadStream(`${filePath}/${fileName}`),
terminal: false
});
readInterface
.on('line', line => {
// Do processing here to create the response
})
.on('close', () => {
resolve(response);
});
} catch(err){
console.log("Inside catach block");
reject(err);
}
})
}
}
module.exports = new fileParser();
你永远不会看到 Inside catach block
行,
因为 createReadStream
不会像“正常”那样抛出错误。
当它想抛出错误时,它会发出 error
事件。
您需要的是 createReadStream
的句柄 error
(不是 readInterface
)
const fs = require('fs');
const readline = require('readline');
class fileParser {
readPolicyFile = function (filePath, fileName) {
return new Promise((resolve, reject) => {
let response = {};
// create a stream and handle it's error event
const stream = fs.createReadStream(`${filePath}/${fileName}`);
stream.on('error', (error) => {
reject(error);
// or reject({success: false}), but why call reject with data
// If you don't want to handle error of readPolicyFile function, just call resolve({success: false})
});
let readInterface = readline.createInterface({
input: stream,
terminal: false
});
readInterface
.on('line', line => {
// Do processing here to create the response
})
.on('close', () => {
resolve(response);
});
})
}
}
module.exports = new fileParser();