异步编程和Promise
如果程序调用某个方法,等待其执行全部处理后才能继续执行,我们称其为同步的。相反,在处理完成之前就返回调用方法则是异步的。在使用同步编程方式时,由于每个线程同时只能发起一个请求并同步等待返回,这种等待不仅使程序变慢,而且浪费了计算机资源,所以为了提高系统性能,此时我们就需要引入更多的线程来实现并行化处理,这就是异步编程的出发点。
异步编程是可以让程序并行运行的一种手段,其可以让程序中的一个工作单元与主应用程序线程分开独立运行,并且在工作单元运行结束后,会通知主应用程序线程它的运行结果或者失败原因。使用异步编程可以提高应用程序的性能和响应能力等。
Promise 是异步编程的一种解决方案,比传统的解决方案回调函数和事件更合理和更强大。
Promise对象有以下两个特点:
对象的状态不受外界影响。Promise对象代表一个异步操作,有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。Promise对象的状态改变,只有两种可能:从pending变为fulfilled和从pending变为rejected。只要这两种情况发生,状态就凝固了,不会再变了,会一直保持这个结果,这时就称为 resolved。如果改变已经发生了,你再对Promise对象添加回调函数,也会立即得到这个结果。
Promise作用与用法
Promise是一种用于处理异步操作的JavaScript对象。它可以将异步操作的结果以回调函数的形式返回给调用者,从而使得代码的执行更加流畅和可读。
Promise有三种状态:Pending(进行中)、Fulfilled(已完成)和Rejected(已拒绝)。当异步操作开始执行时,Promise的状态为Pending。当操作成功完成时,Promise的状态会变为Fulfilled,并将操作的结果作为参数传递给回调函数。当操作失败时,Promise的状态会变为Rejected,并将错误信息作为参数传递给回调函数。
Promise的用法主要包括以下几个步骤:
1. 创建Promise对象:使用Promise构造函数创建一个Promise对象,该对象包含一个异步操作。
2. 处理异步操作结果:使用then方法处理异步操作的结果。then方法接收两个参数:成功回调函数和失败回调函
数,分别处理异步操作成功和失败的情况。
3. 处理Promise链:如果需要多个异步操作依次执行,可以使用Promise链。在then方法中返回一个新的Promise对
象,然后继续调用then方法处理新的异步操作结果。
4. 处理异常情况:使用catch方法处理Promise链中的异常情况,避免程序出现错误。
5. 处理多个Promise对象:使用Promise.all方法同时处理多个Promise对象,等待所有异步操作完成后再执行回调函数。
总之,Promise可以帮助我们更加方便地处理异步操作,提高代码的可读性和可维护性。
then():
getJSON("./1.json").then(function(post) {
return getJSON(post.commentURL);
}).then(function (comments) {
console.log("resolved: ", comments);
catch:
getJSON('/posts.json').then(function(posts) {
}).catch(function(error) {
// 处理 getJSON 和 前一个回调函数运行时发生的错误
console.log('发生错误!', error);
});
Promise在实际环境下的应用
Promise在实际环境下的应用很广泛,以下是一些常见的应用场景:
1. 异步请求:Promise可以用来处理异步请求,例如发送AJAX请求、获取数据等。
2. 动画效果:Promise可以用来处理动画效果,例如在动画完成后执行一些操作。
3. 数据库操作:Promise可以用来处理数据库操作,例如插入、删除、更新等。
4. 文件上传:Promise可以用来处理文件上传,例如上传文件后执行一些操作。
5. 错误处理:Promise可以用来处理错误,例如在发生错误时执行一些操作。
6. 多个异步请求的处理:Promise可以用来处理多个异步请求的处理,例如在所有请求完成后执行一些操作。
7. 流程控制:Promise可以用来控制流程,例如在某个条件满足后执行一些操作。
8. UI交互:Promise可以用来处理UI交互,例如在用户点击某个按钮后执行一些操作。
async/await的作用与用法
async/await是ES2017中引入的一种异步编程语法糖,它的作用是简化异步编程的代码结构,使其更加易读和易维护。
async/await的用法如下:
1. 在函数声明前加上async关键字,表示该函数是一个异步函数。
2. 在异步函数中使用await关键字等待异步操作的结果,await关键字可以等待Promise对象的resolve()方法返回结果或任何返回值的表达式。
3. 在异步函数中使用try/catch语句捕获异步操作的错误。
例如,下面是一个使用async/await的简单示例:
async function getData() {
try {
const response = await fetch('https://api.github.com/users');
const data = await response.json();
console.log(data);
} catch (error) {
console.error(error);
}
}
在上面的代码中,我们首先定义了一个异步函数getData(),然后使用await关键字等待fetch()方法返回的Promise对象的结果,再使用await关键字等待response.json()方法返回的Promise对象的结果,最后打印出获取到的数据。如果任何一个异步操作出错,就会被try/catch语句捕获并打印错误信息。