大家好!跟你们聊聊一个有意思的话题,那就是 node.js 的 Promise 对象,你们可能在想它能做什么用?别急,听我慢慢说。
let flag = true; const hello = new Promise(function (resolve, reject) { if (false) {//异步操作成功 resolve("success"); } else { reject("error"); } });
先看下 Promise 的神奇!简单来说,它能让你看明白那些乱七八糟的异步任务。是不是觉得很厉害?那么怎么用?
hello.then( function (value) { console.log(value) }, function (err) { console.log(err) } );
说到Promise,你可以试试它的catch或then函数,就像抓起两个绳子,把成功结果传给回调,再把错误信息交给回调处理。理解了吗?
function chenqionghe(second) { return new Promise((resolve, reject) => { setTimeout(function () { console.log("chenqionghe"); resolve(); }, second * 1000); }) } function get(second) { return new Promise((resolve, reject) => { setTimeout(function () { console.log("get"); resolve() }, second * 1000); }) } function muscle(second) { return new Promise((resolve, reject) => { setTimeout(function () { console.log("muscle"); resolve(); }, second * 1000); }) }
但要是你省了那个then调用?那可真是大事儿!
chenqionghe(3) .then(function () { return get(2) }) .then(function () { return muscle(1) });
大家知道吗?除了chengqionghe,还有一个关键点是它有3秒的延迟设置,这就是为啥大家总是先看到chengqionghe的输出。所以当Promise出错了,就像气球破了一样,会一直往下撞,直到有外力干预才能停下。因此,咱们在处理Reject情况时最好放在catch块中,才不至于让事情愈演愈烈~
chenqionghe(3); get(2); muscle(1);
那么,捕获异常又是怎么回事?这个问题也很重要!
是滴没错!异常其实就相当于Promise,因此后续还能继续用then。不过它的特点就在于,处理异常是放到后面去做的。
chenqionghe(3) .then(function () { return get(2) }) .then(function () { throw new Error("abc"); return muscle(1) }) .catch(function (e) { console.log("异常:" + e.message) }) ;
好,说完了。还有个finally,不管怎样都会执行,哪怕有错也没事儿!说白了,finally其实就是then的一种特殊用法。
chenqionghe(3) .then(function () { return get(2) }) .then(function () { throw new Error("abc"); return muscle(1) }) .catch(function (e) { console.log("异常:" + e.message) }) .then(function () { console.log("异常后执行") }) ;
希望今天的 node.js 小知识对你有帮助!能用得着就点个赞呗,分享给别人也行。有问题或者感想大胆留下来下回见咯!
chenqionghe(3) .then(function () { return get(2) }) .then(function () { throw new Error("abc"); return muscle(1) }) .catch(function (e) { console.log("异常:" + e.message) }) .finally(function () { console.log("最后都会执行的方法") }) ;
原文链接:https://www.icz.com/technicalinformation/web/2024/03/11324.html,转载请注明出处~~~
评论0