函数中的函数未在javascript中等待承诺

函数中的函数未在javascript中等待承诺,javascript,loopback,Javascript,Loopback,对不起,如果我的标题不是很明确,我不知道如何正确地解释这一点。 我正在尝试为我的应用程序使用独特的功能,该应用程序使用环回3和mongodb。它似乎工作正常,但我的端点不会在函数中返回。 这是我的密码 const distinctUsers = await sellerCollection.distinct('userId',{ hostId : host.id, eventId:{ "$ne" : eventId } }, asyn

对不起,如果我的标题不是很明确,我不知道如何正确地解释这一点。 我正在尝试为我的应用程序使用独特的功能,该应用程序使用环回3和mongodb。它似乎工作正常,但我的端点不会在函数中返回。 这是我的密码

const distinctUsers = await  sellerCollection.distinct('userId',{
      hostId : host.id,
      eventId:{
        "$ne" : eventId
      }
    }, async function (err, userIds) {;

      if(!userIds || userIds.length ==0)
        return [];

      const filter = {
        where:{
          id: {
            inq: userIds
          }
        }
      };
      console.log("should be last")
      return await BPUser.find(filter);
    });
    console.log(distinctUsers);
    console.log("wtf??");
    //return [];

如果我取消对return[]的注释,它将发送return,稍后它将显示应该是最后一个,因此即使我没有return,它似乎也会完成。它现在正在等待答复。我不喜欢我的代码看起来的样子,所以任何关于如何使它看起来更好的指针我都会接受。

它看起来像
sellerCollection。distinct
将回调作为其参数之一,因此,您不能将
异步/wait
与回调样式函数一起使用,因为这不是一个承诺

如果您想使用
async/await
,我建议将此调用转换为承诺:

函数findDistinct(主机ID、事件ID){
返回新承诺((解决、拒绝)=>{
sellerCollection.distinct(
“用户ID”,
{hostId,eventId:{“$ne”:eventId},
函数(错误,用户ID){
如果(错误){
拒绝(错误);
返回;
}
如果(!userIds | | userIds.length==0){
决心([]);
返回;
}
解析(userid);
}
)
})
}
然后,您可以将此新函数与
async/await
一起使用,如下所示:

异步函数getDistinctUsers(){ 试一试{ const hostId=。。。 常量事件ID=。。。 const distinctUsers=wait findDistinct(主机ID、事件ID) if(distinctUsers.length==0){ 返回 } 常数过滤器={ 其中:{ id:{inq:userIds} } } const bpUsers=wait BPUser.find(filter)//假设这是一个承诺 console.log(bpUsers) }捕获(错误){ //处理错误 } }
sellerCollection到底是什么东西?如果它不需要一个
异步
函数,那么东西可能就不起作用了。
sellerCollection.distinct
不太可能接受节点样式的异步回调并返回一个承诺-很少看到类似的情况-而且,您还有一个错误的
在codeHi中,我认为这会起作用,但在次要函数上发生的事情似乎仍然在另一个线程idk上运行。我做了这个控制台;const distinctUsers=wait findDistinct(sellerCollection,host.id,eventId);log({“aaa”:distinctUsers});它不会传递到第二个控制台.log。@JuanDiego我刚刚意识到我在
findDistinct
函数中犯了一个错误,很抱歉,请用我所做的更改重试