2017-06-17 103 views
0

在承诺解决后,我如何在我的res中得不到价值?异步承诺不返回结果

我的console.log看起来是这样的:

=====!!USER NOT FOUND!!===== 
Res: undefined 

这是我的功能

async function findUser(userID, userType) { 
    await new Promise((resolve, reject) => { 
    usersTable.findOne (
     { _id: userID } 
    ,function (err, data) { 
     if (err) { 
      throw new Error('findUser: ' + err); 
     } else { 
      if (!data) { 
       console.log("=====!!USER NOT FOUND!!=====") 
       resolve("NEW"); 
      } else { 
       console.log("=====USER FOUND=====") 
       resolve("OK"); 
      }; 
     }; 
    }); 
})}; 

这是我的来电显示

async function main() { 
    var res = ""; 
    try { 

     // Find the user 
     res = await findUser(userEmail, "tenant"); 
     console.log("Res: " + res); 
     if (res == "NEW") { 
      res = await newUser();     // Add the new tenant 
     } 
    } 
    catch(err) { 
     console.error(err); 
     console.log(" newBooking: " + err); 
     callback({ error:true, err }); 
    } 
} 
main(); 
+0

您应该拒绝,而不是抛出一个错误 –

+0

@Jonasw是的,我看到了,我只在开发过程扔错了,一旦工作,我拒绝。 'catch(err)'得到'reject(“错误信息”),但我不明白为什么解决不了。 – torbenrudgaard

回答

1

查找用户应该返回某事:

async function findUser(userID, userType) { 
    return await new Promise((resolve, reject) => { 
    ... 
    }); 
} 

如果你这样做等待findUser()你等待,直到异步函数返回某物。你的异步函数返回undefined。


顺便说一句:你可能不使用异步函数都:

function findUser(userId,userType){ 
    return new Promise(...); 
} 
+0

Gaaaah !!我怎么没有看到!这就是它的原因。再次非常感谢你Jonas :-) – torbenrudgaard

+0

嗯......好吧,让我更新问题,以便你明白为什么我认为我需要等待...... – torbenrudgaard

+0

好的乔纳斯 - 看看来电者。我需要做很多查找(从示例中省略)并添加一个新用户,但只有在用户不存在的情况下。我不需要等待findUser函数来做到这一点吗? – torbenrudgaard