我是nodejs
的初学者。我有一个使用async
方法的函数,该函数读取JSON值并更新到数据库。但是这里的问题是,有时我在读取该函数中的JSON值时得到unhandledpromiserejectionwarning typeerror cannot read property
。
下面是示例代码段:
proto.onWspresenceEvent = function (json_obj , cb){
try{
(async () => {
var self = this;
let event_state = 0;
let id = json_obj["SCA"].id; //here getting the error
})();
}
catch(e){
}
}
答案 0 :(得分:0)
未处理的承诺拒绝警告是由于代码的语法错误引起的。您可以尝试这样做可能会解决您的问题
proto.onWspresenceEvent = async (json_obj , cb)=>{
try{
await () => {
var self = this;
let event_state = 0;
let id = json_obj["SCA"].id; //here getting the error
})();
}
catch(e){
}
}
答案 1 :(得分:0)
在最新版本的节点中,您已经要处理被拒绝的承诺,也可以使用.catch
短语。
您的诺言在哪里?异步函数总是返回一个承诺。即使您编写了函数,也无法拒绝它-您必须放置一个.catch
短语。
注释:catch
之后的try
块没有资格作为承诺拒绝处理程序。您必须将.catch
放在您的承诺之后,例如:
proto.onWspresenceEvent = function (json_obj , cb){
try{
(async () => {
var self = this;
let event_state = 0;
let id = json_obj["SCA"].id; //here getting the error
cb("sucess")
})()
.catch(reason) { // your error handling
}
}
catch(e){
cb("failed")
}
}
当您的json文件不包含您尝试读取的属性时,可能会导致该错误,因此会引发错误。由于此错误位于异步函数内部,因此会拒绝带有该错误的promise,但是该特定promise没有错误处理,因此会因该错误而失败。
答案 2 :(得分:0)
function yourFunc(json_obj , cb){
try {
(() => {
var self = this;
let event_state = 0;
let id = json_obj["SCA"].id;
cb("sucess")
})();
} catch(e){
cb("failed")
}
}
yourFunc({ SCA: { id: 123 } }, console.log) // success
yourFunc(null, console.log) // failed
// can be rewritten more clearly as follow
function yourFuncClear(json_obj , cb){
try {
let id = json_obj["SCA"].id;
cb("sucess")
} catch (e){
cb("failed")
}
}
yourFuncClear({ SCA: { id: 123 } }, console.log) // success
yourFuncClear(null, console.log) // failed