2017-07-20 106 views
1

我有一个函数,它做异步数据库搜索操作。使用异步/等待不工作

var get_all_channels = function { 
    return new Promise(()=> { 
     db.find({type:'pricing'},{channel_name:1},function(err,docs){ 
     if(err) 
      return err; 
     var c = [] 
     docs.forEachOf(function(ch){ 
      c.push(ch['channel_name']) 
     }) 
     return c; 
    }) 
    }) 
} 

async function send(){ 
    return await get_all_channels() 
} 
function calculate(){ 
    send().then(res => alert(res))  
} 

这里,上述功能不起作用。我不知道为什么?请帮我修复这个功能。

回答

2

您需要解决的结果的承诺,该阵列c,在get_all_channels

var get_all_channels = function { 
    return new Promise((resolve, reject)=> { 
     db.find({type:'pricing'},{channel_name:1},function(err,docs){ 
     if(err) { 
      reject(err) 
      return 
     } 

     var c = [] 
     docs.forEachOf(function(ch){ 
      c.push(ch['channel_name']) 
     }) 

     resolve(c) 
    }) 
    }) 
} 

而且在calculate,你也可以使用await如果你想,并通过@netchkin如指出,你不需要sendasync/await只要它只是返回await

function send(){ 
    return get_all_channels() 
} 

async function calculate(){ 
    alert(await send()) 
} 
+0

什么用的决心? – bigbounty

+1

当你创建一个承诺时,你需要传递两个回调,一个'resolve'和一个'reject'。您需要在一切正常时调用结果并在出错时调用拒绝并返回错误 –

+1

好的,非常感谢@Alberto – bigbounty