这个问题在这里已有答案:
我想将以下回调过程转换为承诺。我有以下内容:
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'));
})