zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    leetcode—Swap Nodes in Pairs
    leetcode--Merge k Sorted Lists
    leetcode—Valid Parentheses
    leetcode—3sum
    编程工具(保持更新)
    QT下调用摄像头(opencv2.4.4)
    qtcreator 与 opencv
    在线公式编辑器
    QT学习(对话框)codeblock版本
    QT-opencv小结
  • 原文地址:https://www.cnblogs.com/tekkaman/p/7497481.html
Copyright © 2011-2022 走看看