首页 > 编程语言 >JavaScript Promise

JavaScript Promise

时间:2022-08-15 15:01:58浏览次数:44  
标签:function 异步 resolve console 函数 JavaScript Promise

异步编程

同步(synchronous):同步按照代码顺序执行。
异步(asynchronous):异步不按照代码顺序执行。

JS异步操作函数往往通过回调函数来实现异步任务的结果处理

回调函数

回调函数是一个函数,在启动一个异步任务的时候告诉它,等你完成这个任务之后要做什么。主线程不用关系异步任务的状态了。

function print() {
  document.getElementById("demo").innerHTML="RUNOOB";
}
setTimeout(print, 3000);

异步Ajax

除了setTimeout函数以外,异步回调也应用于Ajax变成。
XMLHttpRequest常用于请求来自远程服务器上的XML或JSON数据,一个标准的XMLHttpRequest对象包含多个回调。

JavaScript Promise

Promise是ECMAScript6提供的类,为了更快捷优雅的编写异步任务。

  • 构造Promise
new Promise(function(resolve, reject){
  
});

代码比对

// 采用函数瀑布实现
setTimeout(function() {
  console.log("First");
  setTimeout(function() {
    console.log("Second");
  },4000);
}, 1000);

// 采用new Promise实现
new Promise(function(resolve, reject){
  setTimeout(function(){
    console.log("First");
    resolve();
}, 1000);
}).then(function() {
  return new Promise(function(resolve, reject) {
    setTimeout(function () {
      console.log("Second");
      resolve();
    }, 4000;
  });
}).then(function(){
});

Promise的使用

Promise构造函数只存在一个参数,是一个函数,这个函数在构造之后会直接被异步执行。
当Promise被构造的时候,起始函数被异步执行;

new Promise(function(resolve, reject) {
  console.log("Run");
});

Promise类中存在3个方法【.then()】【.catch()】和【.finally】三个方法
三个方法的参数都是一个函数,

  • .then()可以将参数中的函数添加到当前Promise的正常执行序列。
  • .catch()则设定Promise的异常处理序列。
  • .finally()在Promise执行的最后一定会执行序列。

.then()传入的函数会按照顺序依次执行,有任何异常都会直接跳到catch序列;

new Promise(function (resolve, reject) {
    console.log(1111);
    resolve(2222);
}).then(function (value) {
    console.log(value);
    return 3333;
}).then(function (value) {
    console.log(value);
    throw "An error";
}).catch(function (err) {
    console.log(err);
});
resolve() 中可以放置一个参数用于向下一个 then 传递一个值,then 中的函数也可以返回一个值传递给 then。但是,如果 then 中返回的是一个 Promise 对象,那么下一个 then 将相当于对这个返回的 Promise 进行操作,这一点从刚才的计时器的例子中可以看出来。

reject() 参数中一般会传递一个异常给之后的 catch 函数用于处理异常。

但是请注意以下两点:

resolve 和 reject 的作用域只有起始函数,不包括 then 以及其他序列;
resolve 和 reject 并不能够使起始函数停止运行,别忘了 return。

Promise对象代表一个异步操作。存在3中状态: Pending(进行中)、Resolved(已完成 fulfilled) 和 Rejected(已失效)
通过回调里的 resolve(data) 将这个 promise 标记为 resolverd,然后进行下一步 then((data)=>{//do something}),resolve 里的参数就是你要传入 then 的数据。

标签:function,异步,resolve,console,函数,JavaScript,Promise
From: https://www.cnblogs.com/openmind-ink/p/16588304.html

相关文章

  • javascript关于正则表达式
    概述正则表达式是用于字符串匹配的(四个支持正则的方法search查找下标macth查找数组split切割 replace替换)1.正则表达式对象声明1.1new关键词声明varre......
  • JavaScript 异步函数的 Promisification 处理
    Promisification是一个很长的词,表示一个编程范式的转变,即将接受回调的函数转换为一个返回类型为Promise的函数。我们现实的开发项目中经常需要这种转换,因为许多函数和......
  • 将使用回调函数作为参数的函数改造为返回 Promise 的一个具体例子
    我开发了一个函数loadScript,可以动态加载指定的本地JavaScript文件。源代码如下:functionloadScript(src,callback){letscript=document.createElement('scri......
  • Promise 静态 API 的使用方法
    Promise.all使用场景:假设我们希望许多Promise并行执行,并等待它们都准备好。一个实际例子是:并行下载多个URL,并在这些URL全部下载完成后,再进行后续的业务逻辑处理。......
  • Promise.all API 的出错处理
    Promise.all使用场景:假设我们希望许多Promise并行执行,并等待它们都准备好。一个实际例子是:并行下载多个URL,并在这些URL全部下载完成后,再进行后续的业务逻辑处理。......
  • JavaScript快速入门-01-环境搭建
    1环境搭建  搭建JavaScript开发环境有很多种组合,本文中采用VisualStudioCode和Node.js的组合,详细如下所示:1.1Node.js环境搭建1.1.1下载Node.js  不管是基......
  • JavaScript关于cookie
        1.http和httpshttp,https都是网络传输协议是用于网络相关传输,http走的是明文传输,https走的密文传输(内部采用对称加密以及非对称加密)。对应的https安全性......
  • 【Javascript小知识点】将对象中内容打印到控制台
    将对象中内容打印到控制台    有时结果打印到控制台却显示为[objectObject]。我们想查看其中的内容时,怎么也看不到,这样会把我们急死,非常的危险。于是,我们可以使用J......
  • JavaScript 对 DOM 元素排序
    <!DOCTYPEhtml><html><head><styletype="text/css">#wrapdiv{float:left;}#wrap:after{......
  • JavaScript ES6新增
    命名修饰符let:不能重复声明变量、块级作用域leta=1;leta=2;//报错const:初始化常量,必须给初始值,否则报错、在同一个作用域内,const定义的常量不能修改其值......