Promise相关问题

1.promise

promise已一种简洁的方式实现异步回调以及关联多个异步的调用先后顺序。promise对象有三个状态,正在执行中,已结束,以及出错状态。

2.promise使用

2.1 实现AJAX异步回调

function MKBaseService() {

    this.method = HttpMethod.get;

    this.ServerAddress = "http://59.110.40.75:8887/";

    this.serviceType = MSAPI.games;

    /*promise实现回调*/
    this.promiseRequest = function () {

        let that = this

        let promise = new Promise(function (success,error) {

            let request = new XMLHttpRequest()

            request.timeout = 3000

            request.open(that.method,that.ServerAddress + that.serviceType)

            request.send()

            request.onreadystatechange = function () {

                if (request.readyState == 4 && request.status == 200) {

                    let object =  JSON.parse(request.responseText)

                    success(object)

                }
                if (request.readyState == 4 && request.status != 200){

                    error(request.status)
                }
            }

        })

        return promise
    }




}

var service = new MKBaseService()

service.promiseRequest().then(function (response) {

    console.log(response)
})

service.promiseRequest().catch(function (status) {

    console.log(`error == ${status}`)
})

2.2 promise 多个promise调用关系

function random01() {

    var timeOut = Math.random() * 2;

    let p = new Promise(function (resolve, reject) {

        setTimeout(function () {

            if (timeOut>1){


                resolve("01-success")

            }else {

                reject("01-error",p)
            }

        },timeOut *1000)
    })

    return p;
}

function random02() {

    var timeOut = Math.random() * 2;

    let p = new Promise(function (resolve, reject) {

        setTimeout(function () {

            if (timeOut>1){


                resolve("02-success")

            }else {

                reject("02-error")
            }

        },timeOut *2000)
    })

    return p;
}

2.2.1 实现多个异步操作顺序执行例如两个异步操作a和b,a成功回调之后执行b

// 顺序执行两个promise

random01()
    .then(function (data) {

    console.log(data)

    return random02()

})
    .then(function (data) {

    console.log(data)
})
    .catch(function (error) {

    console.log(error)
})

2.2.2 实现多个异步操作并行执行,所有操作执行完之后进行其他操作

Promise.all([random01(),random02()]).then(function () {

    console.log("all is over ")
}).catch(function (error) {

    console.log(error)
})

2.2.3 实现多个异步操作并行执行,第一个异步操作执行完之后进行其他操作

Promise.race([random01(),random02()]).then(function () {

    console.log("have a race")
}).catch(function (error) {

    console.log(error)
})

 

  • 0
    点赞
  • 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、付费专栏及课程。

余额充值