Javascript 我如何才能将上一个承诺传递给下一个承诺';结果如何?

Javascript 我如何才能将上一个承诺传递给下一个承诺';结果如何?,javascript,es6-promise,chain,Javascript,Es6 Promise,Chain,我的后端有一系列承诺,我需要在第二个承诺中访问第一个承诺的结果 mongo.connect() .then((client) => { return circolari.infiniteScroll(client, currCirc) }) .then(({ data, client }) => { mongo.close(client) res.send(data) }) .catch(error =&g

我的后端有一系列承诺,我需要在第二个承诺中访问第一个承诺的结果

 mongo.connect()
    .then((client) => {
      return circolari.infiniteScroll(client, currCirc)
    })
    .then(({ data, client }) => {
      mongo.close(client)
      res.send(data)
    })
    .catch(error => res.sendStatus(error.message))
我需要访问
客户端
以关闭第二个承诺中的连接。 现在,为了实现这一点,我在
circolari.infiniteScroll(client,currCirc)
中解析如下对象:

resolve({
    data: data,
    client: client
})

有了这个解决方法,它可以工作,但我认为有更好的方法,谢谢。

您可以将它缩短一点:

mongo.connect()
.then(client => circolari.infiniteScroll(client, currCirc)))
.then(({ data, client }) => {
      mongo.close(client);
      res.send(data);
})
或者使用wait和async:

async function returnResponse(res) {
    let client;
    try {
        client = await mongo.connect();
        const data = await circolari.infiniteScroll(client, currCirc);
        res.send(data);
    } catch (err){
        res.sendStatus(err.message)
    } finally {
        await mongo.close(client); // close connection in every case
    }

}
foo();

您可以将其缩短一点:

mongo.connect()
.then(client => circolari.infiniteScroll(client, currCirc)))
.then(({ data, client }) => {
      mongo.close(client);
      res.send(data);
})
或者使用wait和async:

async function returnResponse(res) {
    let client;
    try {
        client = await mongo.connect();
        const data = await circolari.infiniteScroll(client, currCirc);
        res.send(data);
    } catch (err){
        res.sendStatus(err.message)
    } finally {
        await mongo.close(client); // close connection in every case
    }

}
foo();

您可以使用
async
/
await
const client=await mongo.connect()然后
常数数据=等待循环无限滚动(客户机,当前循环)然后
等待mongo.close(客户端)和最后
res.send(数据)
您可以使用
async
/
await
const client=await mongo.connect()然后
常数数据=等待循环无限滚动(客户机,当前循环)然后
等待mongo.close(客户端)和最后
res.send(数据)问题:mongo.close()中是否可能有错误,因此应该在原始的try块中?为什么把它放在最后一块?事实上,是的。关闭连接时也可能出现错误,您是对的。最后是在任何情况下关闭数据库。你可以把它放在try中,但是在catch中你也应该使用它。因此,有一个地方最终出现了问题:mongo.close()中是否可能出现错误,因此它应该出现在原始的try块中?为什么把它放在最后一块?事实上,是的。关闭连接时也可能出现错误,您是对的。最后是在任何情况下关闭数据库。你可以把它放在try中,但是在catch中你也应该使用它。所以有一个地方终于来了