【问题标题】:use answer .then () outside and use in another part of the code in node js在外部使用 answer .then () 并在节点 js 的另一部分代码中使用
【发布时间】:2019-03-01 14:55:11
【问题描述】:

我如何在外面使用承诺的答案。那我该怎么办?

   arreglo.forEach((item) => {
        if (item.tipoCampo == 3) {
            self.campoSelects(item.tablaCampo)
                .then(resp => {
                    console.log(resp)
                })
                .catch(e => console.log(e))
        }
    });

.then () 中的

console.log (resp) 知道它并正确打印,但是当我想从 forEach 中知道 resp 以在下面使用时,它说未定义 谢谢。

【问题讨论】:

  • 你不能在 forEach 之外使用响应,因为 Promise 是异步的。您可以使用 for ... of 循环和异步函数(developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…)。请注意,这将使 main 函数返回一个 Promise。
  • 一种快速而肮脏的方法是将resp分配给item,例如item.campoSelectsResult = resp,这是因为在 then() 范围内它可以访问 item 和 resp。
  • 不要使用forEach,最好使用map 来生成与Promise.all 一起使用的promise 数组。

标签: node.js promise adonis.js


【解决方案1】:
arreglo.forEach((item) => {
   if (item.tipoCampo == 3) {
     self.campoSelects(item.tablaCampo)
        .then(resp => {
            logMyData(resp);
        })
         .catch(e => console.log(e))
    }
});

logMyData=(x)=>{
 console.log(x);
}

这就像添加一个在您的 .then 中执行的辅助函数一样简单

【讨论】:

    【解决方案2】:

    猜测您希望能够访问 forloop 中的值。由于 self.campoSelects 是一个承诺,我们可以使用异步等待。

    // Call campo selects
    function getCampoSelects(_self, tablaCampo) {
      return new Promise(async (resolve, reject) => {
        let campoData;
    
        try {
          campoData = await _self.campoSelects(tablaCampo);
        } catch (err) {
          reject(err);
        }
    
        resolve(campoData);
      });
    }
    
    function happyLittleFunc() {
      const arreglo = [];
    
      arreglo.forEach(async (item) => {
        if (item.tipoCampo === 3) {
          let campoSelect;
    
          // Unsure if you are setting self somewhere but it can be passed in here.
          try {
            campoSelect = await getCampoSelects(self, item.tipoCampo);
          } catch (err) {
            console.log(err);
            return;
          }
    
          console.log(campoSelect);
        }
      });
    }
    
    happyLittleFunc();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-14
      • 1970-01-01
      • 2011-05-29
      • 2019-02-03
      • 2013-11-22
      • 1970-01-01
      • 2022-01-23
      相关资源
      最近更新 更多