2017-05-27 88 views
1

我使用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 

回答

1

基本上,你要检查,如果返回的承诺 - 你可以用它在箱子外面。如果没有 - 你可以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,但我懒得去做。

+0

奥斯曼不回诺言。 – Alvin

+0

@Alvin,没有人声称它确实如此。试试这个代码,它* promisifies * transaction.save方法。只要确保在resolve()之前放置一个'else'即可。 – trincot