首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何等待直到Vimeo.accessToken方法完成。想用Q吗?

如何等待直到Vimeo.accessToken方法完成。想用Q吗?
EN

Stack Overflow用户
提问于 2014-10-02 04:23:36
回答 1查看 143关注 0票数 0

我正在用node.js编写一个小应用程序,它与Vimeo的API接口。我使用npm install vimeo-api从vimeo安装了正式的Node。一切都很好,但现在我想改变程序流程,使之更像“承诺”。例如,我希望我的程序在执行任何新代码之前等待,直到它接收到由OAuth方法返回的Vimeo.accessToken访问令牌。我怎么能做到这一点?

下面是一些驱动访问令牌检索的代码--非常多地摘自SDK页面上的示例:

代码语言:javascript
复制
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中,如何执行以下操作:

代码语言:javascript
复制
getAccessToken(myCode, "http://someplace.com").done(function(data){
     console.log("Access token" + nutil.inspect(data));
})

我想也许我会使用克里斯·科瓦尔的Q库,但不确定如何实现它,这样我的应用程序就会以我想要的方式流动。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-02 16:31:39

因此,在阅读了Q的文档和一些示例之后,下面是我实现的内容,它似乎正在工作!

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26154464

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档