所有分类
  • 所有分类
  • 后端开发
Promise对象:让异步任务乖乖排队

Promise对象:让异步任务乖乖排队

Promise对象的使用方法。使用then方法调用,第一个参数是成功回调,第二个参数是失败回调,如下状态的回调函数(即then的第二个参数),总是使用catch方法。希望本文所述对大家node.js程序设计有所帮助。

大家好!跟你们聊聊一个有意思的话题,那就是 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)
  });

Promise对象:让异步任务乖乖排队

大家知道吗?除了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

评论0

请先
注意:请收藏好网址www.icz.com,防止失联!站内免费资源持续上传中…!赞助我们
显示验证码
没有账号?注册  忘记密码?