如何在Promise技术中将参数传递给.then

时间:2017-12-23 19:59:09

标签: javascript es6-promise

我尝试在Promise链中将参数传递给.then。我找到了这个主题Promises, pass additional parameters to then chain,但我对JS / Promise很新,并且不能将它与我的例子相匹配。

componentDidMount() {

    function getData(url) {
      return new Promise(function(resolve, reject) {
        var xhttp = new XMLHttpRequest();
        xhttp.open("GET", url, true);
        xhttp.onload = function() {
          if (xhttp.status === 200) {
            resolve(JSON.parse(xhttp.response));
          } else {
            reject(xhttp.statusText);
          }
        };
        xhttp.onerror = function() {
          reject(xhttp.statusText);
        };
        xhttp.send();
      });
    }

    function getHeaders(url) {
      return new Promise(function(resolve, reject) {
        var xhttp = new XMLHttpRequest();
        xhttp.open("GET", url, true);
        xhttp.onload = function() {
          if (xhttp.status === 200) {
            resolve(getPagesNumber(xhttp.getResponseHeader("Link")));
          } else {
            reject(xhttp.statusText);
          }
        };
        xhttp.onerror = function() {
          reject(xhttp.statusText);
        };
        xhttp.send();
      });
    }

    var promise = getData("https://api.github.com/orgs/angular/members");
    promise.then(function(members) {
      console.log(members);
      return getHeaders("https://api.github.com/repos/angular/angular-jquery-ui/contributors")
    })
    .then(function(pgItr) {
      console.log(pgItr);
    })
    .catch(function(error){
      console.log(error);
    });

  }

我需要从

传递网址

return getHeaders("https://api.github.com/repos/angular/angular-jquery-ui/contributors")

到.then(其中是console.log(pgItr);)

我想在componentDidMount()之后添加一个变量{并在第一个.then中设置这个变量(带url),然后在第二个.then中读取它。但我认为这是一个棘手/欺骗/不合适的解决方案。

1 个答案:

答案 0 :(得分:0)

您始终可以使用Promise.allthen返回多个承诺或值,如下所示:

const somePromise = Promise.resolve("some value");
somePromise
    .then(someValue => Promise.all([someValue, Promise.resolve("other value")]))
    .then(([someValue, otherValue]) => console.log(`[${someValue}] and [${otherValue}]`));