javascript - 稍后在链中使用 Promise 的响应

标签 javascript node.js promise bluebird q

我已经 promise 链,第一个链中的响应稍后应该在链(4和6)的地方使用,我使用一些全局变量来处理它,但这不是正确的方法,有一个有更好的方法来实现这一目标?

这是这个问题的一些说明......

var step1 = (ms) => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      log("This is step 1");
      resolve(20);
    }, ms);
  })
}
var step2 = (ms) => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      log("This is step 2");
      resolve();
    }, ms);
  })
};
var step3 = (ms) => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      log("This is step 3");
      resolve();
    }, ms);
  })
};

var step4 = (ms) => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      log("Step 4, run : " + ms );
      resolve();
    }, ms);
  })
};


var globalVar = null;

//Promise chain
step1(500)
  .then((res) => {
     //Here I keep the response in global variable to use later on
     globalVar = res;
    log(res);
    return step2(300);
  }).then(() => {
    return step3(200);
  }).then(() =>{
   //Here I need to use the res from the first promise
    var lclvar = globalVar +200 ;
    return step4(lclvar);
  }).catch((err) => {
  log(err);
});

我发现了这个,但这在这种情况下没有帮助(至少无法处理它)

How do I access previous promise results in a .then() chain?

最佳答案

您可以将 step2step3 等调用嵌套在第一个处理程序中,然后 res 对它们都可用

step1(500).then((res) => {
  log(res);
  return step2(300)
    .then(() => step3(200))
    .then(() => step4(res + 200));
}).catch((err) => {
  log(err);
});

关于javascript - 稍后在链中使用 Promise 的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39700925/

相关文章:

node.js - 错误node_modules/@types/node/globals.d.ts(196,5) errorTS2300 : Duplicate identifier 'resolve' src/typings. d.ts(12,3)重复标识符 'resolve'

javascript - 如何使用 Knockout JS 添加类?

javascript - 获取 SVG 中 g 元素的同级元素是使用 jquery 从页面上的其他 SVG 返回所有相似的级别元素。为什么?

javascript - HTML5 : Preventing helper auto-scroll functionality during dragging

javascript - 在任务计划程序中运行 JavaScript Puppeteer 代码?

css - 如何使用 node-sass 将 scss 编译为 css

node.js - 在不访问数据库的情况下测试 Hapijs 端点

javascript - Reactjs 如何从多个 url 获取数据?

javascript - JSHint、For 循环、Promises 和一个讨厌的 lint 错误

grails - 呈现页面grails 3.1之后运行方法async