Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.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 node.js是否传递回调?_Javascript_Node.js - Fatal编程技术网

Javascript node.js是否传递回调?

Javascript node.js是否传递回调?,javascript,node.js,Javascript,Node.js,目前正在工作: function getAccessToken ( callback ) { request({ uri: oauth2_url, method: 'POST', form: { grant_type: 'password', client_id: client_id, client_secret: client_secret,

目前正在工作:

function getAccessToken ( callback ) {

    request({
        uri: oauth2_url,
        method: 'POST',
        form: { 
            grant_type: 'password', 
            client_id: client_id, 
            client_secret: client_secret,   
            username: username, 
            password: password 

        }
    }, 
    function tokenRequestResponse (error, response) { 

        if ( !error && response.statusCode == 200) { 
            // Send our data back to caller.
            callback ( JSON.parse(response.body).access_token );
        }
        else { 
            console.log('Error: ' + response.statusCode); 
        }

    });
}
我想要完成的是:

function tokenRequestResponse (error, response) { 

        if ( !error && response.statusCode == 200) { 

            callback ( JSON.parse(response.body).access_token );
        }
        else { 
            console.log('Error: ' + response.statusCode); 
        }

}

function getAccessToken ( callback ) {

    request({
        uri: oauth2_url,
        method: 'POST',
        form: { 
            grant_type: 'password', 
            client_id: client_id, 
            client_secret: client_secret,   
            username: username, 
            password: password 

        }
    }, tokenRequestResponse });

}
我希望避免嵌套tokenRequestResponse(),除非这是使其与回调一起工作的唯一方法

它应当:

  • 创建请求
  • 收到响应后,检查错误
  • 如果未找到错误,请将数据发送回getAccessToken()的调用方

这更像是一个学习Node.js异步的问题,我已经尝试了一些方法,并想请教一些专家。

解决这个问题的最常用方法是返回一个函数,该函数关闭
回调

比如说:

function tokenRequestResponse(callback) {
    return function (error, response) { 

        if ( !error && response.statusCode == 200) { 

            callback ( JSON.parse(response.body).access_token );
        }
        else { 
            console.log('Error: ' + response.statusCode); 
        }
    }
}
function getAccessToken ( callback ) {

    request({
        uri: oauth2_url,
        method: 'POST',
        form: { 
            grant_type: 'password', 
            client_id: client_id, 
            client_secret: client_secret,   
            username: username, 
            password: password 

        }
    }, tokenRequestResponse(callback));
}
然后你可以这样使用它:

function tokenRequestResponse(callback) {
    return function (error, response) { 

        if ( !error && response.statusCode == 200) { 

            callback ( JSON.parse(response.body).access_token );
        }
        else { 
            console.log('Error: ' + response.statusCode); 
        }
    }
}
function getAccessToken ( callback ) {

    request({
        uri: oauth2_url,
        method: 'POST',
        form: { 
            grant_type: 'password', 
            client_id: client_id, 
            client_secret: client_secret,   
            username: username, 
            password: password 

        }
    }, tokenRequestResponse(callback));
}

当您调用
tokenRequestResponse(callback)
时,该函数返回一个将用于
请求的函数

您是否可以将回调函数添加到tokenRequestResponse调用中,如
函数tokenRequestResponse(error,response)
I get
ReferenceError:error未定义
,我已尝试将回调添加为参数,但
错误
response
还必须传递参数才能确定响应的有效性。我不太明白您的确切意思。
错误
响应
参数已经通过。啊,我输入了一个错误,它正在工作。谢谢错误,响应“神奇地”传递是令人困惑的。JavaScript是一种函数式语言!返回函数太棒了!:)