使用async / await无效

时间:2017-07-20 07:09:43

标签: javascript node.js asynchronous

我有一个函数,它执行异步数据库搜索操作。

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))    
}

此处,上述功能无效。我不知道为什么?请帮我修复这个功能。

1 个答案:

答案 0 :(得分: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所指出,您不需要async/await中的send作为await只要它返回function send(){ return get_all_channels() } async function calculate(){ alert(await send()) }

const number$ = Rx.Observable.interval(500)
  .map(() => Math.floor(Math.random() * 3))

number$.subscribe(console.log)