Promise的各种方法

JavaScript的Promise是用于处理异步操作的一种方法。Promise对象代表一个异步操作的最终完成(或失败)及其结果值。下面介绍Promise的各种用法,包括创建Promise、链式调用、错误处理、Promise.all、Promise.race、Promise.any等。

1. 创建Promise
const myPromise = new Promise((resolve, reject) => {
  // 异步操作
  let condition = true;

  if (condition) {
    resolve('Success!'); // 操作成功
  } else {
    reject('Failure!'); // 操作失败
  }
});

2. 使用.then()和.catch()
myPromise
  .then(result => {
    console.log(result); // 'Success!'
  })
  .catch(error => {
    console.error(error); // 'Failure!'
  });

3. 链式调用
myPromise
  .then(result => {
    console.log(result);
    return 'Another success';
  })
  .then(newResult => {
    console.log(newResult);
  })
  .catch(error => {
    console.error(error);
  });


4. .finally()

myPromise
  .then(result => {
    console.log(result);
  })
  .catch(error => {
    console.error(error);
  })
  .finally(() => {
    console.log('Operation complete.');
  });

5. Promise.all
Promise.all用于等待所有Promise都完成或其中一个Promise被拒绝。

const promise1 = Promise.resolve(3);
const promise2 = 42;
const promise3 = new Promise((resolve, reject) => {
  setTimeout(resolve, 100, 'foo');
});

Promise.all([promise1, promise2, promise3])
  .then(values => {
    console.log(values); // [3, 42, "foo"]
  })
  .catch(error => {
    console.error(error);
  });


6. Promise.race

Promise.race用于等待第一个Promise完成或拒绝。
const promise1 = new Promise((resolve, reject) => {
  setTimeout(resolve, 500, 'one');
});
const promise2 = new Promise((resolve, reject) => {
  setTimeout(resolve, 100, 'two');
});

Promise.race([promise1, promise2])
  .then(value => {
    console.log(value); // 'two'
  })
  .catch(error => {
    console.error(error);
  });


7. Promise.any
Promise.any用于等待第一个Promise完成,忽略拒绝的Promise。
const promise1 = new Promise((resolve, reject) => {
  setTimeout(reject, 100, 'one');
});
const promise2 = new Promise((resolve, reject) => {
  setTimeout(resolve, 200, 'two');
});
const promise3 = new Promise((resolve, reject) => {
  setTimeout(resolve, 300, 'three');
});

Promise.any([promise1, promise2, promise3])
  .then(value => {
    console.log(value); // 'two'
  })
  .catch(error => {
    console.error(error);
  });


8. Promise.allSettled

Promise.allSettled用于等待所有Promise完成(无论成功或失败)。

const promise1 = Promise.resolve('Success');
const promise2 = Promise.reject('Error');
const promise3 = new Promise((resolve, reject) => {
  setTimeout(resolve, 100, 'Another success');
});

Promise.allSettled([promise1, promise2, promise3])
  .then(results => {
    results.forEach((result) => console.log(result));
    // { status: 'fulfilled', value: 'Success' }
    // { status: 'rejected', reason: 'Error' }
    // { status: 'fulfilled', value: 'Another success' }
  });


9. Promisify
将回调函数转换为Promise形式。
const fs = require('fs');
const util = require('util');

const readFile = util.promisify(fs.readFile);

readFile('example.txt', 'utf8')
  .then(data => {
    console.log(data);
  })
  .catch(error => {
    console.error(error);
  });


10. Async/Await

使用async和await来处理Promise,使代码更简洁
async function fetchData() {
  try {
    const response = await axios.get('https://api.example.com/data');
    console.log(response.data);
  } catch (error) {
    console.error(error);
  }
}

fetchData();

11. Custom Promises
function delay(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

delay(1000)
  .then(() => {
    console.log('Executed after 1 second');
  });

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PromiseJavaScript 中一种处理异步操作的机制,它帮助开发者更好地组织和管理异步代码,使得代码更易于理解和维护。Promise 对象有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。Promise 有以下几个主要的方法: 1. **`new Promise()`**:创建一个新的 Promise 对象,接受一个函数作为参数,这个函数有两个参数:resolve(成功回调)和 reject(失败回调)。 ```javascript const myPromise = new Promise((resolve, reject) => { // 异步操作 if (/* 成功 */) { resolve(value); } else { reject(error); } }); ``` 2. **`.then(onFulfilled, onRejected)`**:当 Promise 转变为 fulfilled 时,执行 onFulfilled 函数;如果变为 rejected,则执行 onRejected 函数。返回一个新的 Promise。 ```javascript myPromise.then(result => { // 处理成功结果 }, error => { // 处理错误 }); ``` 3. **`.catch(onRejected)`**:这是一个简写版的 `.then(null, onRejected)`,用于处理 Promise 的拒绝情况。 ```javascript myPromise.catch(error => { // 错误处理 }); ``` 4. **`.finally(onFinally)`**:无论 Promise 是否完成,都会执行 onFinally 函数,主要用于清理资源或做其他最终操作。 ```javascript myPromise.finally(() => { // 执行无论成功失败都会进行的操作 }); ``` 5. **`.all(arrayOfPromises)`** 和 **`.race(arrayOfPromises)`**:前者等待所有 Promise 全部成功后返回结果数组,后者则返回第一个完成的 Promise 结果。 6. **`Promise.resolve(value)`** 和 **`Promise.reject(error)`**:静态方法,用于直接创建已成功或已失败的 Promise。 7. **`.chain()` 或 `.then().then()`**:链式调用,用于在一系列的异步操作之间建立依赖关系。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值