下面的代码解释了主要异步过程中的两个异步代码。我的问题是“ userController.insertUser”-捕获了一些错误,但是该错误无法引发主要问题
DataMiddleware.DataValidate(Object).then((middlewareSuccess) => {
switch (true) {
case ((tableName === "users") && (method === "CREATE")):
userController.insertUser(Object).then(()=> {
...
}).catch((err) => {
return err
})
break;
case ((tableName === "users") && (method === "BATCH")):
userController.updateUser(Object).then(()=> {
...
}).catch((err) => {
return err
})
break;
}
}).catch((err) => {
console.log("main error",err)
})
如何正确捕捉?
有两种方法可以处理嵌套的承诺错误。
1)将其捕获到嵌套的Promise中并扔给父级
const DataMiddleware = {
DataValidate: sinon.fake.resolves("value")
};
const userController = {
insertUser: sinon.fake.rejects("insertUser erroorr"),
updateUser: sinon.fake.rejects("updateUser erroorr")
};
const tableName = "users",
method = "CREATE";
DataMiddleware.DataValidate()
.then(middlewareSuccess => {
switch (true) {
case tableName === "users" && method === "CREATE":
return userController.insertUser()
.catch(err => {
console.log("nested catch handler " + err);
throw err;
});
}
})
.catch(err => {
console.log("main error " + err);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/sinon.js/5.0.1/sinon.js"></script>
2)退还诺言,让父母处理发生的任何错误
const DataMiddleware = {
DataValidate: sinon.fake.resolves("value")
};
const userController = {
insertUser: sinon.fake.rejects("insertUser erroorr"),
updateUser: sinon.fake.rejects("updateUser erroorr")
};
const tableName = "users",
method = "CREATE";
DataMiddleware.DataValidate()
.then(middlewareSuccess => {
switch (true) {
case tableName === "users" && method === "CREATE":
return userController.insertUser()
}
})
.catch(err => {
console.log("main error " + err);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/sinon.js/5.0.1/sinon.js"></script>
这里的重点是承诺链。您从另一个返回新的诺言,第一个catch
处理程序仍然有效。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句