我正在用node.js编写一个小应用程序,它与Vimeo的API接口。我使用npm install vimeo-api从vimeo安装了正式的Node。一切都很好,但现在我想改变程序流程,使之更像“承诺”。例如,我希望我的程序在执行任何新代码之前等待,直到它接收到由OAuth方法返回的Vimeo.accessToken访问令牌。我怎么能做到这一点?
下面是一些驱动访问令牌检索的代码--非常多地摘自SDK页面上的示例:
var vmoapi = require('vimeo-api'),
vmo = new vmoapi(VMO_CLIENT_ID, VMO_CLIENT_SECRET);
.
.
.
function getAccessToken(code, redirectURI){
vmo.accessToken(code, redirectURI, function(err, token){
if (err) {
console.log("Vimeo API Error\n" + err);
return;
}
if (token.access_token){
console.log(nutil.inspect(token));
vmo.access_token = token.access_token;
user = token.user;
userScopes = token.scope;
return token;
}
})
} 在node.js中,如何执行以下操作:
getAccessToken(myCode, "http://someplace.com").done(function(data){
console.log("Access token" + nutil.inspect(data));
})我想也许我会使用克里斯·科瓦尔的Q库,但不确定如何实现它,这样我的应用程序就会以我想要的方式流动。
发布于 2014-10-02 16:31:39
因此,在阅读了Q的文档和一些示例之后,下面是我实现的内容,它似乎正在工作!
var vmoapi = require('vimeo-api'),
vmo = new vmoapi(VMO_CLIENT_ID, VMO_CLIENT_SECRET),
.
.
.
deferred = Q.deferred();
.
.
.
function getAccessToken(code, redirectURI) {
vmo.accessToken(code, redirectURI, function(err, token) {
if (err) {
console.log("Vimeo API Error\b" + err);
deferred.reject(new Error(err));
}
if (token.access_token){
vmo.access_token = token.access_token;
user = token.user;
userScopes = token.scope;
deferred.resolve(token);
}
})
return deferred.promise;
}
getAccessToken(parsedURL.query.code, vmoRedirectURI)
.then(function(data){
console.log("Vimeo access token:\n" + nutil.inspect(data))
});解决方案涉及使用Q.deferred()对象,然后在Vimeo.accessToken回调函数中设置.reject和.resolve方法。然后,在调用Vimeo.accessToken方法的函数的末尾,返回deferred.promise。
https://stackoverflow.com/questions/26154464
复制相似问题