2016-12-01 27 views
1

ヘルパー関数が非同期のときに条件の一部として使用できるヘルパー関数を構造化する方法を理解するのに問題があります。非同期ヘルパー関数

私は、ユーザーが有効なアカウントを持っているかどうかをチェックし、わずかに異なる方法で応答する2つのパースクラウドコード関数を定義しました。したがって、ユーザーが有効なアカウントを持っているかどうかを単にチェックする3番目のヘルパー関数を作成します。

// Check if user account is active before allowing saves. 
Parse.Cloud.beforeSave("Item", function(request, response) { 
    if (isActiveUser(request.user)) { 
    resonse.success(); 
    } 
    else { 
    response.error("Inactive user"); 
    } 
}); 

// Checks if calling user account is active. 
Parse.Cloud.define("isActive", function(request, response) { 
    if (isActiveUser(request.user)) { 
    response.success(true); 
    } 
    else { 
    response.success(false); 
    } 
}); 

// Returns true if user is active. 
function isActiveUser(user) { 
    var query = new Parse.Query(User); 
    query.first({ 
    success: function(user) { 
     if (user !== null && typeof user === 'object') { 
     return true; 
     } 
     else { 
     return false; 
     } 
    } 
    }); 
} 

isActiveUser機能の目的は、trueまたはfalseを返すことですが、Jaromandaが指摘するように、それがすべてでは何も返さない:これは、次の3つの機能がどのように見えるかです。私は実際に動作するよりイベント駆動型の方法でこれをどのように構造化するのか分かりません。私は誰かがJS :)に侵入しようとしているこの根っからのPHPプログラマーを助けることができる願ってい

+0

'isActiveUser'は全く何も返さない - そう、 –

答えて

1

どのようにあなたの関数でコールバック関数を使用する方法について - 「isActiveUserを()」

書き換えなど:

function isActiveUser(user, callback) { 
    var query = new Parse.Query(User); 
    query.first({ 
    success: function(user) { 
     if (user !== null && typeof user === 'object') { 
     callback(" Active ",true); 
     } 
     else { 
     callback(" Non-Active ",false); 
     } 
    } 
    }); 
} 

そして、この関数を呼び出す:

... 
isActiveUser(your_user_item , function(err,flag){ 
    if(flag == true){ 
     // This User is active 
    } 
    else{ 
     // Non active , show some msg 
    } 
}); 
+0

おかげundefined'リターン'と同等、私は内側の関数はバリを継承することができることを認識していませんでした外部機能(すなわち、 '応答 'オブジェクトがコールバックの内部で利用可能であることに注意してください)。しかし、それはうまくいくようです。 – danepowell

+0

母、私は彼らが同じ範囲にあったと思う。 –