繁体   English   中英

node.js传递一个回调?

[英]node.js pass a callback?

正在工作 :

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的异步问题,我尝试了一些事情,并想到我会问一些专家。

解决此问题的最常见方法是返回一个关闭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)该函数返回一个将用于request回调的函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM