2017-05-07 23 views
0

我正在使用try catch語句。在我的try語句中,我只想返回從函數中獲取的值,這些函數在try catch語句之外定義。但是,這些值是未定義的。在try catch中未定義的值

我加入以下代碼片段:

const request = User.friendRequest(userId, friendId, (err, friendshipRequest) => { 
    if (err) throw err; 
    return friendshipRequest; 
}); 

如果我CONSOLE.LOG(friendshipRequest)的回調函數內,一切正常般的魅力,我得到我想要的JSON對象。但是,當我嘗試在try語句中使用const request - const request變得未定義。

try { 
    return res.status(201).json({ 
    error: false, 
    request, 
    }); 
} catch (e) { 
    return res.status(400).json({ error: true, message: e.errsmg }); 
} 

完整的代碼看起來像這樣

export const sendFriendRequest = async (req, res) => { 
    const { userId, friendId } = req.params; 

    const request = await User.friendRequest(userId, friendId, (err, friendshipRequest) => { 
    if (err) throw err; 
    return friendshipRequest; 
    }); 

    try { 
    return res.status(201).json({ 
     error: false, 
     request, 
    }); 
    } catch (e) { 
    return res.status(400).json({ error: true, message: e.errsmg }); 
    } 
}; 
+0

'User.friendRequest'似乎並沒有返回一個承諾,當你傳遞一個回調到它。 – Bergi

+0

可能的重複[未定義的值在try catch](http://stackoverflow.com/q/43836415/1048572)?! – Bergi

回答

0

當我改變了我的代碼,這一點,並貼有郵遞員 - 一切正常,但我仍想只從函數值傳遞給我的嘗試/抓住。有什麼建議麼?

try { 
    User.friendRequest(userId, friendId, (err, friendshipRequest) => res.status(201).json({ 
     error: false, 
     friendshipRequest, 
    })); 
    } catch (e) { 
    console.log(e); 
    return res.status(400).json({ error: true, message: e.errsmg }); 
    } 
0

我認爲User.friendRequest()回報承諾,也可以與回調的工作,但你不應該在同一時間(await使用的承諾,但你也傳遞一個回調)同時使用。

只需使用承諾:

export const sendFriendRequest = async (req, res) => { 
    const { userId, friendId } = req.params; 

    try { 
    const request = await User.friendRequest(userId, friendId); 
    return res.status(201).json({ 
     error: false, 
     request, 
    }); 
    } catch (e) { 
    return res.status(400).json({ error: true, message: e.errsmg }); 
    } 
};