在外部使用答案.then()并在节点js的另一部分代码中使用

时间:2019-03-01 14:55:11

标签: node.js promise adonis.js

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

   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时,它表示未定义 谢谢。

2 个答案:

答案 0 :(得分:0)

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内部执行的辅助函数一样简单

答案 1 :(得分:0)

猜测您希望能够访问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();