javascript - Node-Soap - 在异步方法中抛出错误
问题描述
使用 node-soap 库创建了一个肥皂 api,但是当我尝试使用
throw {
Fault: {
Code: {
Value: 'soap:Sender',
Subcode: { value: 'rpc:BadArguments' }
},
Reason: { Text: 'Processing Error' }
}
};
正如图书馆所述,我得到了一个
UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
这就是我目前正在做的
ssm.decrypt(args.request, password, base_key)
.then(function (res) {
console.log(res)
parseString(res, async function (err, result) {
if (err) {
//the throws causes the error
throw {
Fault: {
error: {
data: {
error
} //Error object from catch
}
}
};
} else {
//some code
}
谢谢
解决方案
在异步函数中抛出错误
parseString(res, async function (err, result)...
拒绝异步函数返回的承诺 - 没有 catch 处理程序。如果parseString
同步调用其回调,您可以删除async
声明,将调用保留为
parseString(res, function (err, result)...
但是,如果 parseString 是异步的,则需要对其进行承诺,以便可以将错误处理到周围的承诺链中。作为一个未经测试的例子:
function doParseString( res) {
return new Promise( function( resolve, reject) {
parseSting( res, function( err, result) {
err ? reject( err) : resolve( result);
});
});
}
可以按照以下方式使用
ssm.decrypt(args.request, password, base_key)
.then( doParseString)
.then( function (result) {
// some code
})
.catch( console.log); // do something with the error