簡體   English   中英

如何串聯承諾

[英]How to chain in series promises

我想將一系列的諾言鏈接起來,以便依次執行三個諾言。 我不想嵌套功能。 我嘗試向其中添加一個解析,但似乎在功能內部的所有操作完成之前它都已解析。

function first(){
  var promise = new Promise(function(resolve, reject){
            console.log('fetchToken 1');
  });
  return promise;
}

function second(item){
  var promise = new Promise(function(resolve, reject){
            console.log('fetchToken 2');
  });
  return promise;
}

function third(item){
  var promise = new Promise(function(resolve, reject){
            console.log('fetchToken 3');
  });
  return promise;
}

  function getTokenGroup() {
    function logTaskError(e) {
        console.error(e);
        throw e;  // reject the Promise returned by then
    }
    var task1 = first();
    var task2 = task1.then(second);
    var task3 = task2.then(third);
    var alltasks = task3.then(null, logTaskError);

    return alltasks;
  }

  getTokenGroup();

在函數內部調用resolve,從而使promise得以解決

 function first() { var promise = new Promise(function(resolve, reject) { console.log('fetchToken 1'); resolve(); }); return promise; } function second(item) { var promise = new Promise(function(resolve, reject) { console.log('fetchToken 2'); resolve(); }); return promise; } function third(item) { var promise = new Promise(function(resolve, reject) { console.log('fetchToken 3'); resolve(); }); return promise; } function getTokenGroup() { function logTaskError(e) { console.error(e); throw e; // reject the Promise returned by then } var task1 = first(); var task2 = task1.then(second); // why return new promise var task3 = task2.then(third); var alltasks = task3.then(null, logTaskError); return alltasks; } getTokenGroup(); 

或者更好,因為可以繼續使用第一承諾then

 function first() { console.log('fetchToken 1'); } function second(item) { console.log('fetchToken 2'); } function third(item) { console.log('fetchToken 3'); } function getTokenGroup() { function logTaskError(e) { console.error(e); throw e; // reject the Promise returned by then } var promise = Promise.resolve(0); // create a resolved promise var task1 = promise.then(first); var task2 = task1.then(second); var task3 = task2.then(third); var alltasks = task3.then(null, logTaskError); return alltasks; } getTokenGroup(); 

您需要解決一個承諾,否則它不會進一步傳播。

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise

function first(){
   return new Promise(function(resolve, reject){
        console.log('fetchToken 1');
        resolve('your data');
   })
}

您需要致電“解決”:

 function first(){
    var promise = new Promise(function(resolve, reject){
      console.log('fetchToken 1');
      resolve(1); //==> call this one, parameter in here is just a sample
    });
    return promise;
  }

  function second(item){
    var promise = new Promise(function(resolve, reject){
      console.log('fetchToken 2');
    });
    return promise;
  }

  function third(item){
    var promise = new Promise(function(resolve, reject){
      console.log('fetchToken 3');
    });
    return promise;
  }

  function getTokenGroup() {
    function logTaskError(e) {
      console.error(e);
      throw e;  // reject the Promise returned by then
    }
    var task1 = first();
    var task2 = task1.then(second);
    var task3 = task2.then(third);
    var alltasks = task3.then(null, logTaskError);

    return alltasks;
  }

  getTokenGroup();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM