如何将下一个承诺的结果传递给下一个承诺?

时间:2019-09-23 19:08:50

标签: javascript es6-promise chain

我的后端有一连串的诺言,我需要访问第二个诺言的第一个诺言的结果

 mongo.connect()
    .then((client) => {
      return circolari.infiniteScroll(client, currCirc)
    })
    .then(({ data, client }) => {
      mongo.close(client)
      res.send(data)
    })
    .catch(error => res.sendStatus(error.message))

我需要访问client才能在第二个Promise中关闭连接。 现在,要实现我在circolari.infiniteScroll(client, currCirc)中解析如下对象:

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

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

1 个答案:

答案 0 :(得分:0)

您可以将其缩短一点:

mongo.connect()
.then(client => circolari.infiniteScroll(client, currCirc)))
.then(({ data, client }) => {
      mongo.close(client);
      res.send(data);
})

或使用await和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();