Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 解析参数&;CoffeeScript中的匿名函数_Javascript_Facebook_Coffeescript - Fatal编程技术网

Javascript 解析参数&;CoffeeScript中的匿名函数

Javascript 解析参数&;CoffeeScript中的匿名函数,javascript,facebook,coffeescript,Javascript,Facebook,Coffeescript,如何将此函数转换为与coffeescript兼容的版本 我的主要问题是fb.login。。然而,我尝试我似乎总是失去任何一个参数或权限 function promptLogin(login_level, callback) { var cbk = callback; FB.login(function(response) { if (response.session) { if (response.perms) {

如何将此函数转换为与coffeescript兼容的版本

我的主要问题是fb.login。。然而,我尝试我似乎总是失去任何一个参数或权限

function promptLogin(login_level, callback)
{
    var cbk = callback;

    FB.login(function(response) {
        if (response.session) {
            if (response.perms) {
                cbk( true, response );
            } else {
                cbk( false, response );
                //showAlert( "Please accept the permissions.", 'Error' );
            }
        } else {
            cbk( false, response );
            //showAlert( "Please accept the permissions.", 'Error' );
        }
        }, {perms:'email,publish_stream'}
    );
}
非常感谢

加雷斯

编辑

谢谢你下面的所有答案,有些有效,有些无效,有些给我带来了其他问题

我已经确定了混合搭配的解决方案:

login: (permissions = '', callback) ->
    responseHandler = (response) ->

        if response.session
            if permissions && permissions != ''
                if permissions == response.perms
                    AP.log 'Login accepted - Permissions Accepted', response
                    callback true, response
                else
                    AP.log 'Login rejected - Permissions Rejected', response
                    callback false, response
            else
                AP.log 'Login accepted - No Permissions', response
                callback true, response                 
        else
            AP.log 'Login rejected', response
            callback false, response
        return

    FB.login responseHandler, perms: permissions
谢谢所有回答的人。我希望这能帮助别人

亲切问候,


Gareth

这是未经测试的,但我认为以下方法应该有效:

promptLogin = (login_level, callback) ->
  FB.login ((response) ->
    if response.perms and response.session
      cbk true, response

    else
      if not response.perms
        cbk false, response
        # showAlert ...
      else # if not response.session
        cbk false, response),
  perms: 'email,publish_stream'

当我遇到这些问题时,我会做两件事:

  • 添加许多括号
  • 将每个参数放入局部变量中
  • 在这种情况下,括号有助于:

    promptLogin = (login_level, cb) ->
    FB.login(((response) ->
        cb response.perms and response.session, response),
        perms: 'email, publish-stream')
    
    临时变量有助于:

    promptLogin = (login_level, cb) ->
        login = (response) -> cb response.perms and response.session, response
        options = perms: 'email, publish-stream'
        FB.login login, options
    
    A


    最后一行的dedent+逗号起作用。

    为了可读性,我肯定会命名您传递给
    FB的回调。login

    promptLogin = (login_level, callback) ->
      responseHandler = (response) ->
        if response.session
          if response.perms
            callback true, response
          else
            callback false, response
            # showAlert 'Please accept the permissions.', 'Error'
        else # no session
          callback false, response
          # showAlert 'Please accept the permissions', 'Error'
        return
    
      FB.login responseHandler, perms: 'email,publish_stream'
      return
    

    每个函数末尾的额外
    返回值
    s可能重要,也可能不重要,这取决于API。只需注意您的隐式返回。

    这将编译成看起来功能等效的代码,其优点是要短得多。我建议使用coffeescript实时编译器进行测试

    promptLogin = (login_level, callback) ->
      FB.login (response) ->
        callback response.session and response.perms, response
        return
      , perms:'email,publish_stream'
      return
    

    根据这些函数的返回值是否重要,返回可能是不必要的。

    当我获取js代码片段并想要 快速转换咖啡脚本

    然后迭代出明显的

    promptLogin = (login_level, callback) ->
      cbk = callback
      FB.login (response) ->
        if response.session
          cbk response.perms, response
        else
          cbk false, response
      , perms: "email,publish_stream"
    
    再三

    promptLogin = (login_level, callback) ->
      FB.login (response) ->
        if response.session
          callback response.perms, response
        else
          callback false, response
      , perms: "email,publish_stream"
    
    直到最后你得到

    promptLogin = (login_level, callback) ->
      FB.login (response) ->
          callback
            if response.session then response.perms else false
            response
          , perms: "email,publish_stream"
    

    不幸的是,这仍然没有在权限中解析:(我试图将第二个(可读性最高)示例应用到我的脚本中,但它只是出现了错误:“response未定义”。PrompLogintwo=(login_level,cbk)->loginCbk=(response)->if response.perms和response.session cbk true,response else alert(“抱歉,您必须接受权限。”)cbk false,response options=perms:'email,publish_stream'FB.login loginCbk,options
    promptLogin = (login_level, callback) ->
      FB.login (response) ->
        if response.session
          callback response.perms, response
        else
          callback false, response
      , perms: "email,publish_stream"
    
    promptLogin = (login_level, callback) ->
      FB.login (response) ->
          callback
            if response.session then response.perms else false
            response
          , perms: "email,publish_stream"