• Promise.then


    Promise.then

    1、If onFulfilled returns a promise, the return value of then will be resolved/rejected by the promise.

      如果then的handler中返回一个promise(叫A),那么then()所返回的promise(叫B)的值,将会是这A的值。

    function resolveLater(resolve, reject) {
      setTimeout(function () {
        resolve(10);
      }, 1000);
    }
    function rejectLater(resolve, reject) {
      setTimeout(function () {
        reject(20);
      }, 1000);
    }
    
    var p1 = Promise.resolve('foo');
    var p2 = p1.then(function() {
      // Return promise here, that will be resolved to 10 after 1 second
      return new Promise(resolveLater);
    });
    p2.then(function(v) {
      console.log('resolved', v);  // "resolved", 10
    }, function(e) {
      // not called
      console.log('rejected', e);
    });
    
    var p3 = p1.then(function() {
      // Return promise here, that will be rejected with 20 after 1 second
      return new Promise(rejectLater);
    });
    p3.then(function(v) {
      // not called
      console.log('resolved', v);
    }, function(e) {
      console.log('rejected', e); // "rejected", 20
    });
    View Code

    2、In practice, it is often desirable to catch rejected promises rather than use then's two case syntax, as demonstrated below.

      通过使用catch()来处理失败,而不是使用then()的第二个参数。

    Promise.resolve()
      .then( () => {
        // Makes .then() return a rejected promise
        throw 'Oh no!';
      })
      .catch( reason => {
        console.error( 'onRejected function called: ', reason );
      })
      .then( () => {
        console.log( "I am always called even if the prior then's promise rejects" );
      });
    View Code

    3、catch()中如无异常,则返回的是一个resolved promise。

    Promise.reject()
      .then( () => 99, () => 42 ) // onRejected returns 42 which is wrapped in a resolving Promise
      .then( solution => console.log( 'Resolved with ' + solution ) ); // Resolved with 42
    View Code

    4、通过throw或rejected Promise来返回一个异常。

    Promise.resolve()
      .then( () => {
        // Makes .then() return a rejected promise
        throw 'Oh no!';
      })
      .then( () => { 
        console.log( 'Not called.' );
      }, reason => {
        console.error( 'onRejected function called: ', reason );
      });
    View Code

    5、当return一个value时,实际上返回的是 Promise.resolve(<value>)

    var p2 = new Promise(function(resolve, reject) {
      resolve(1);
    });
    
    p2.then(function(value) {
      console.log(value); // 1
      return value + 1;
    }).then(function(value) {
      console.log(value + '- This synchronous usage is virtually pointless'); // 2- This synchronous usage is virtually pointless
    });
    
    p2.then(function(value) {
      console.log(value); // 1
    });
    View Code

    参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then

  • 相关阅读:
    伪句柄
    WM_NCACTIVE
    怎么让模态对话框最小化时,主窗口也最小化
    CMap和CArray中ARG_
    看着嫦娥2号上去,心里激动不已
    Qt中使两个部件同步,这里为spin和slider
    memcpy 和strcpy的区别
    如何在linux内核中读写文件
    Could not find *****/adb.exe!的解决方法(android sdk太新了?**#¥)
    加入了HTML特点的Qt,出来的效果不错哟
  • 原文地址:https://www.cnblogs.com/tekkaman/p/7497481.html
Copyright © 2020-2023  润新知