Javascript - 如何在多个 .then() 中使用 promise

use*_*861 7 javascript node.js express

我正在尝试创建一个数组结构。所以,我们有部分,每个部分都有文章。

所以我承诺收集.then()我需要迭代部分承诺的所有部分并选择这部分中的文章.then()我想将其推送到数组部分并在视图中呈现它。

结构是这样的:

-PARTS
      - part
            - u_order
            - u_familia
            - u_part
            - u_type
            - articles (article from each part)
Run Code Online (Sandbox Code Playgroud)

我的代码是这样的:

var p1 = new Promise(function(resolve, reject) {
      var stamp = req.params.stamp;
      request.query("SELECT u_order, u_familia, u_part, u_type FROM u_part (nolock) where u_order <'92' and u_order <> '100'").then((data)=>resolve(data));
      // or
      // reject ("Error!");
    });



    p1.then(function(value){
      var stamp = req.params.stamp;
      console.log(value.length);
      for(var i= 0; i<value.length; i++)
      {
        console.log(value[i]);
        request.query("SELECT st.u_posic, sc.ref, sc.qtt, sc.design FROM st INNER JOIN sc ON st.ref = sc.ref where sc.ststamp ='"+stamp+"' and st.u_posic = '"+value[i].u_order+"'").then((data)=>resolve(data));
      }

    }, function(reason){
      console.log(reason);
    });

    p1.then(function(part, articles){
      var parts = [];
      console.log("PART: " +part.length);
      for(var j= 0; j<part.length; j++)
      {
        console.log(part[j].u_order);
        console.log(part[j].u_familia);
        console.log(part[j].u_part);
        console.log(part[j].u_type);
        console.log(articles[j]);
      };
    });
Run Code Online (Sandbox Code Playgroud)

最后,.then()我只有这些部分,我无法访问文章,可能是因为我在第二次.then() 开始使用 Promise 时做得不好,我也阅读了文档,但我不能这样做。

任何人都可以帮助我理解和解决这个问题?

谢谢

Jar*_*a X 8

我能做的就是最好的。

request.query("SELECT u_order, u_familia, u_part, u_type FROM u_part (nolock) where u_order <'92' and u_order <> '100'")
.then(function(parts){
    var stamp = req.params.stamp;
    return Promise.all(parts.map(function(part) {
        return request.query("SELECT st.u_posic, sc.ref, sc.qtt, sc.design FROM st INNER JOIN sc ON st.ref = sc.ref where sc.ststamp ='"+stamp+"' and st.u_posic = '"+part.u_order+"'")
        .then(function(articles) {
            part.articles = articles;
            return part;
        });
    }));
})
.then(function(parts){
    parts.forEach(function(part) {
        console.log(part.u_order);
        console.log(part.u_familia);
        console.log(part.u_part);
        console.log(part.u_type);
        part.articles.forEach(function(article) {
            console.log(article.u_posic);
            console.log(article.ref);
            console.log(article.qtt);
            console.log(article.design);
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

附赠 ES2015+ 以上版本

request.query("SELECT u_order, u_familia, u_part, u_type FROM u_part (nolock) where u_order <'92' and u_order <> '100'")
.then(parts => Promise.all(parts.map(part => request.query(`SELECT st.u_posic, sc.ref, sc.qtt, sc.design FROM st INNER JOIN sc ON st.ref = sc.ref where sc.ststamp ='${req.params.stamp}' and st.u_posic = '${part.u_order}'`)
    .then(articles => {
        part.articles = articles;
        return part;
    })
)))
.then(parts => parts.forEach(part => {
    console.log(part.u_order);
    console.log(part.u_familia);
    console.log(part.u_part);
    console.log(part.u_type);
    part.articles.forEach(article => {
        console.log(article.u_posic);
        console.log(article.ref);
        console.log(article.qtt);
        console.log(article.design);
    });
}));
Run Code Online (Sandbox Code Playgroud)

  • 您从未添加任何解释。 (24认同)
  • 仍然没有解释:)在对您提供的答案的合法搜索中发现了这个,所以解释会非常有帮助。 (3认同)