javascript - 如何串联 Promise

标签 javascript promise

我想串联一系列 Promise,以便按顺序执行 3 个 Promise。我不想嵌套函数。我尝试向其中添加解析,但似乎它在函数内部的所有内容完成之前解析。

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 继续第一个 promise

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();

关于javascript - 如何串联 Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43578221/

相关文章:

javascript - Cordova SQLite 插件 promise javascript 链

javascript - Promise 等待解决而不返回

javascript - 嵌套 promise 返回未定义

javascript - 捷径 promise

javascript - 如何将 iframe 面板注入(inject) Google Chrome 扩展并在 iframe 内添加点击事件?

javascript - Grunt files api 创建了不需要的文件

javascript - 如何在javascript中回到数组的开头

Angular/TypeScript - 在另一个函数完成后调用一个函数

javascript - Angular $scope.$apply 无法与 form.submit() 一起正常工作

javascript - jquery滚动问题