2017-06-17 130 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