2015-10-16 236 views
0

我有一種情況,只有在他或她已登錄時才能訪問用戶數據。當我不查詢數據庫時,有以下代碼可用。含義var tmp設置爲YOUR_API_KEY。但是當查詢數據庫時,我得到[object Promise]。在Google搜索後我嘗試了不同的解決方案,但沒有任何接縫可以解決我的問題。續集:如何訪問[object Promise]或從promise返回值?

var tmp = function() { 

    if(req.session.user) { 

     return User.findOne({ 
     where: { 
        id: req.session.user.userID 
       }, 
       include: [ 
        { model: Apikey } 
       ] 
      }).then(function(sqlUser) { 
       return sqlUser.Apikeys['0'].kay; 
      }); 

     } else { 
      return "YOUR_API_KEY" 
     } 
} 
+1

你不知道。你只能返回一個承諾,並通過一個'.then()'回調函數「訪問」它的*異步結果*。 – Bergi

回答

1

使用 「回調」

var tmp = function(callback) { 
    if(req.session.user) { 
    return User.findOne({ 
     where: { 
       id: req.session.user.userID 
      }, 
      include: [ 
       { model: Apikey } 
      ] 
    }).then(function(sqlUser) { 
     callback(sqlUser.Apikeys['0'].kay) 
    }); 
    } else { 
    callback("YOUR_API_KEY") 
    } 
} 

//now you can use your function like this 
tmp(function(apiKey){ 
    //do something with apiKey e.g.: 
    console.log(apiKey) 
}); 
+0

對,問題是我想呈現一個頁面。所以問題是,我想等待呈現頁面,直到我得到APIKey。我想等到我得到所有東西,但我也不想把res.render('index',{...放在promise中,因爲它會很快變醜。 –

+0

@DavidGatti,你可以渲染頁面首先,然後使用ajax request =獲取APIKey) –