Как использовать результат 'then' для next 'then'? - PullRequest
0 голосов
/ 22 января 2020

Я хочу вернуть то, что получаю после асинхронного c вызова.

Итак

app.get("/books", async (req, res) => {
    let books = await getBooks()
        .then(json => {
            res.status(200).send({"books": json});
        }); 
});

Следует подождать при визуализации результата, пока не будет вызван getBooks.

export async function getBooks() {
    console.log("Getting books from cloud");
    Book.findAll({
        // ...

    }).then(books => {
        console.log("Got books");
        return JSON.stringify(books, null, 4);
    });
}

Но сейчас ответ обрабатывается без фактического ожидания результата.

Ответы [ 4 ]

2 голосов
/ 22 января 2020

Вам не нужно использовать обещания. Вы можете просто использовать await, а затем использовать результат этого.

 app.get("/books", async (req, res) => {
   const books = await getBooks();
   res.status(200).send({ books });
 });

Я бы настоятельно рекомендовал сделать еще один шаг и использовать try / catch для обработки ошибок

 app.get("/books", async (req, res) => {
   try {
     const books = await getBooks();
     res.status(200).send({ books });
   } catch (error) {
     // massage this to send the correct status code and body
     res.status(400).send( { error });
   }
 });
0 голосов
/ 22 января 2020

Вам просто нужно вернуть свое обещание, а поскольку вы просто возвращаете обещание, вам не нужно async ;.

app.get("/books", async (req, res) => {
    let json = await getBooks()
    res.status(200).send({"books": json});
});

export function getBooks() {
    console.log("Getting books from cloud");
    return Book.findAll({
        // ...

    }).then(books => {
        console.log("Got books");
        return JSON.stringify(books, null, 4);
    });
}
0 голосов
/ 22 января 2020
app.get("/books", async (req, res) => {
    let books = await getBooks();
    res.status(200).send({"books": books});
})
0 голосов
/ 22 января 2020

Вы также можете использовать await во втором методе:

export async function getBooks() {
console.log("Getting books from cloud");
var books = await Book.findAll({
    // ...

})
 if(books){
     console.log("Got books");
    return JSON.stringify(books, null, 4);
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...