有没有一种方法可以将在.then承诺内返回的结果保存到变量中

时间:2020-10-10 13:50:02

标签: javascript node.js promise return

我进行了API连接以获取查询结果(数组数组)。但是我无法将结果保存到另一个变量中,无法将其与我创建的其他函数一起使用。我得到Promise {<Pending>}

的答案

下面是使用console.log且不与变量关联的代码示例

client.query('SELECT * FROM "INDIGO MONITORING" LIMIT 2;').then(result => console.log(result.rows)).catch(error => console.log(error));

结果示例:good Result when testing with console.log in .then

这是我尝试保存结果并返回Promise {<pending>}

let results = client.query('SELECT * FROM "INDIGO MONITORING" LIMIT 2;').then(result => {return result}).catch(error => console.log(error));

Result giving Promise Pending

3 个答案:

答案 0 :(得分:0)

您可以使用await来执行此操作,但是(当然)这将阻止整个调用函数,直到答应完成为止。另外,您不需要then(result => {return result}),这是默认行为。

let results = await client.query('SELECT * FROM "INDIGO MONITORING" LIMIT 2;').catch(error => console.log(error));

注意:为了使上面的行起作用,它必须在用async声明的函数内(例如async function f() {...})。

答案 1 :(得分:0)

我会用另一种方式写它。

chrome://bluetooth-internals/#devices

答案 2 :(得分:0)

您可以使用async-await

const getResults = async() => {
  try {
    const results = await client.query('SELECT * FROM "INDIGO MONITORING" LIMIT 2;');
    return results;
  } catch (err) {
    console.log(err);
    return null;
  }
}

下面,我模拟了一个示例Promise以及处理和处理响应的方式。在这两种方法中,承诺都将在500ms之后得到解决。

  • 使用.then.catch

const examplePromise = () => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve("Success");
    }, 500)
  })
}

examplePromise().then((res) => {
  console.log(res);
}).catch(err => {
  console.log(err)
});

  • 使用asyncawait。对于async-await,错误将使用try/catch处理/捕获。

const examplePromise = () => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve("Success");
    }, 500)
  })
}

const asynAwaitEx = async() => {
  try {
    const res = await examplePromise();
    console.log(res);
  } catch (err) {
    console.log(err);
  }
}

asynAwaitEx();