js异步Promise函数简单使用

本文详细介绍了JavaScript中Promise的基本用法及其实现异步请求的例子。包括如何创建Promise实例、处理成功的resolve回调以及处理失败的reject回调。同时,还展示了如何使用.then()和.catch()方法来处理异步操作的结果。

先附一个连接:http://liubin.org/promises-book/#chapter1-what-is-promise

1.基本用法

var promise = new Promise(function(resolve, reject) {
    // 异步处理
    // 处理结束后、调用resolve 或 reject
});

    用法示例1.

function getURL(URL) {
    return new Promise(function (resolve, reject) {
        var req = new XMLHttpRequest();
        req.open('GET', URL, true);
        req.onload = function () {
            if (req.status === 200) {
                resolve(req.responseText);
            } else {
                reject(new Error(req.statusText));
            }
        };
        req.onerror = function () {
            reject(new Error(req.statusText));
        };
        req.send();
    });
}
// 运行示例
var URL = "http://httpbin.org/get";
getURL(URL).then(function onFulfilled(value){
    console.log(value);
}).catch(function onRejected(error){
    console.error(error);
});

1.getURL 只有在通过XHR取得结果状态为200时才会调用 resolve - 也就是只有数据取得成功时,而其他情况(取得失败)时则会调用 reject 方法。

2.resolve(req.responseText) 在response的内容中加入了参数。 resolve方法的参数并没有特别的规则,基本上把要传给回调函数参数放进去就可以了。 ( then 方法可以接收到这个参数值)

3.所以上述的
getURL(URL).then(function onFulfilled(value){
    console.log(value);
}).catch(function onRejected(error){
    console.error(error);
});
的then后面的函数中的value就是resolve的值

4.简便用法:(使用Promise的静态函数,42的值会直接放到then中函数的参数中),后面可以放很多then,参数都是前一个then中函数的返回值
Promise.resolve(42).then(function(value){
    console.log(value);
});

 

### JavaScript中Promise函数使用方法 Promise 是 JavaScript 中用于处理异步操作的一种机制,它提供了一种更清晰、更可控的方式来管理异步代码[^1]。通过 Promise,可以避免回调地狱(Callback Hell),并使代码更具可读性和可维护性。 创建一个 Promise 对象时,需要传递一个执行函数(executor),该函数包含两个参数:`resolve` 和 `reject`。`resolve` 用于在异步操作成功时调用,而 `reject` 则用于在异步操作失败时调用[^2]。 以下是一个简单Promise 示例: ```javascript let promise = new Promise((resolve, reject) => { setTimeout(() => { let isSuccess = true; // 假设这是异步操作的结果 if (isSuccess) { resolve('Operation successful'); } else { reject('Operation failed'); } }, 2000); }); ``` Promise 提供了多种方法来处理异步操作的结果: 1. **`.then()` 方法**:当 Promise 状态变为 Fulfilled 时,会调用这个方法。`then` 函数接收两个参数:`onResolved`(Promise 的状态为成功时调用)和 `onRejected`(Promise 的状态为失败时调用)。如果只关心成功的情况,可以只传入一个参数[^4]。 ```javascript promise.then( (value) => console.log(value), // 'Operation successful' (error) => console.error(error) ); ``` 2. **`.catch()` 方法**:当 Promise 状态变为 Rejected 时,会调用这个方法。`catch` 方法实际上是 `then` 方法只传 `onRejected` 参数时的语法糖[^4]。 ```javascript promise.catch((error) => console.error(error)); // 'Operation failed' ``` 3. **`.finally()` 方法**:无论 Promise 的状态是 Fulfilled 还是 Rejected,都会调用这个方法。它可以用于清理资源或执行一些无论结果如何都需要执行的操作。 ```javascript promise.finally(() => console.log('Promise is complete')); ``` 此外,Promise 还提供了静态方法来简化多个 Promise 的处理: - **`Promise.all()`**:接受一个 Promise 数组作为参数,只有所有 Promise 都成功时才会返回成功的结果。如果其中一个 Promise 失败,则返回失败的结果[^3]。 ```javascript let p1 = new Promise((resolve) => setTimeout(() => resolve('p1'), 1000)); let p2 = new Promise((resolve) => setTimeout(() => resolve('p2'), 2000)); Promise.all([p1, p2]).then((values) => console.log(values)); // ['p1', 'p2'] ``` - **`Promise.race()`**:接受一个 Promise 数组作为参数,返回第一个完成的 Promise 的结果,无论是成功还是失败[^3]。 ```javascript let p1 = new Promise((resolve) => setTimeout(() => resolve('p1'), 1000)); let p2 = new Promise((resolve) => setTimeout(() => resolve('p2'), 2000)); Promise.race([p1, p2]).then((value) => console.log(value)); // 'p1' ``` ### 注意事项 在实际开发中,Promise 的链式调用是非常常见的,这使得我们可以将多个异步操作按顺序执行,并且每个步骤都可以返回一个新的 Promise[^1]。 ```javascript promise .then((result) => { console.log(result); // 'Operation successful' return 'Next operation'; }) .then((nextResult) => { console.log(nextResult); // 'Next operation' }) .catch((error) => { console.error(error); }) .finally(() => { console.log('All operations are done'); }); ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值