异步等待回调不是一个函数
问题描述:
我使用couchbase ottaman包:异步等待回调不是一个函数
let transaction = new Transaction({name:'Couch'});
transaction.save((err) => {
console.log(err);
});
,但我可以用异步/等待着这个包?
async create(){
let transaction = new Transaction({name:'Couch'});
try{
await transaction.save();
} catch (err) {
console.log(err);
}
}
我得到错误:
node_modules\ottoman\lib\modelinstance.js:457
callback(err);
^
TypeError: callback is not a function
答
基本上,你要检查,如果返回的承诺 - 你可以用它在箱子外面。如果没有 - 你可以promisify你需要的功能。 像这样的东西在结果:
function saveModel(transaction) {
return new Promise ((resolve, reject) => {
transaction.save(err => {
if (err)
reject(err);
else
resolve();
});
});
}
这样的功能可以与异步使用/等待:
async create(){
let transaction = new Transaction({name:'Couch'});
try{
await saveModel(transaction);
} catch (err) {
console.log(err);
}
}
另一种方法是查看source files,但我懒得去做。
奥斯曼不回诺言。 – Alvin
@Alvin,没有人声称它确实如此。试试这个代码,它* promisifies * transaction.save方法。只要确保在resolve()之前放置一个'else'即可。 – trincot