lidongyangLeo / LearnNotes

记录学习的点点滴滴
MIT License
0 stars 0 forks source link

[JavaScript] Promise #13

Open lidongyangLeo opened 2 years ago

lidongyangLeo commented 2 years ago

Promise

Promise 是ECMAScript 6提供的类,目的是更加优雅地书写复杂的异步任务。 Promise 对象用于表示一个异步操作的最终完成 (或失败)及其结果值。

状态

在Promise 出现之前。

场景

比如我们需要在在请求API1成功之后,在请求API2, 然后在API2请求成功之后,请求API3


request.onreadystatechange = function () {
    if (request.readyState === 4) {
        if (request.status === 200) {
            // request2  api2
               request2.onreadystatechange=function() {
                     if (request2.readyState === 4) {
                           if (request2.status === 200) {
                                  // request3 api3
                          }
                      }
               }
            return success(request.responseText); 
        } else {
            return fail(request.status);
        }
    }
}

另一个最简单的Promise 例子: 生成一个0-2直接的随机数,如果小于1,则等待一段时间后返回成功,否则返回失败。

function test(resolve, reject) {
    var timeOut = Math.random() * 2;
    log('set timeout to: ' + timeOut + ' seconds.');
    setTimeout(function () {
        if (timeOut < 1) {
            log('call resolve()...');
            resolve('200 OK');
        }
        else {
            log('call reject()...');
            reject('timeout in ' + timeOut + ' seconds.');
        }
    }, timeOut * 1000);