我有一个函数,它执行异步数据库搜索操作。
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))
}
此处,上述功能无效。我不知道为什么?请帮我修复这个功能。
答案 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)