JavaScript将回调转换为承诺[重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript将回调转换为承诺[重复]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

我想将以下回调过程转换为承诺。我有以下内容:

app.get('/api/books', function(req, res)
{
  let booksCallback = function(books)
  {
    res.send(books)
  }
  DataBase.getBooks(booksCallback)

})

然后:

getBooks : function(booksCallback)
{
  database.ref('/books/').once('value', function(datasnapshot)
  {
    var books = datasnapshot.val()
    booksCallback(books)

  });
}

所以我将回调函数作为参数发送到函数getBooks,它对Firebase进行异步调用。但有什么方法可以做像Database.getBooks().then(res.send(books))这样的事情吗?但是我需要先在getBooks中从async函数返回的变量书。这可以用Promise来完成吗?

答案

只需从getBooks函数返回一个promise。

getBooks : function()
{
    return new Promise((resolve, reject) => {
        database.ref('/books/').on('value', (datasnapshot) => { 
            var books = datasnapshot.val(); 
            books ? resolve(books) : reject();
        });
    });  
}

你可以这样使用它......

app.get('/api/books', function(req, res)
{  
  DataBase.getBooks()
   .then((books) => res.send(books))
   .catch(() => console.log('!!. ERROR'));
})

以上是关于JavaScript将回调转换为承诺[重复]的主要内容,如果未能解决你的问题,请参考以下文章

异步 JavaScript - 回调与延迟/承诺 [重复]

如何将我的代码从回调函数更改为承诺 [重复]

如何在 ES6 中将回调代码转换为 Promise [重复]

使用 `this` 将事件回调转换为承诺携带上下文

如何创建从回调函数返回承诺的函数[重复]

可观察与回调 [重复]