如何调用指定为对象值的promise?

时间:2018-01-28 21:54:18

标签: javascript object promise

我将一个函数指定为一个对象的一部分,然后需要将该函数作为一个promise来调用。但即使被定义为承诺,我在调用方法上遇到错误,暗示它不会将其视为承诺。

如果我只是执行appObj.loginApp()(在这种情况下实际上是loginTwitter()函数),该函数按预期工作,但是我需要从函数中获取true / false。我认为我正确地将该函数定义为一个承诺,所以我不理解为什么它在.then中的appObj.loginApp().then(function() { ... }失败了。

我做错了什么?承诺甚至可以称之为?我假设它可以,但很难找到其他人这样做的例子。

function setSocialApp(app) {
  if (app == "twitter") {
    var appObj = {
      ios : "twitter://",
      and : "com.twitter.android",
      loginApp : function (a,b,c) { loginTwitter(a,b,c) },
      logoutApp : function () { logoutTwitter() },
      disableApp : function () { disableTwitter() },
      appName : "Twitter",
      appDB : "social_twitterLogin"
    }
  } else if (app == "instagram") {
    ...
  } else if (app == "facebook") {
    ...
  }
  return appObj ;
}

function loginTwitter() {
  return new Promise ( function (resolve) {
    TwitterConnect.login(
      function(result) {
        console.log('Successful login!');
        setDB("social_twitterLogin",true) ;
        setDB("social_twitterUserID",result.userId);
        setDB("social_twitterUserName",result.userName) ;
        setDB("social_twitterSecret",result.secret) ;
        setDB("social_twitterToken",result.token) ;
        console.log(result);
        resolve (true) ;
      },
      function(error) {
        console.log('Error logging in');
        disableTwitter() ;
        console.log(error);
        resolve (false) ;
      }
    );
  }) ;
}

   function enableApp(app) {
      var appObj = setSocialApp(app) ;  // get app object info
      if (socialItem[appObj.appDB] == false) {
        appObj.disableApp() ;
      } else {
        checkSocialApp(appObj).then(function(response) {  // check if app exists
           if (response == true) {
              console.log("CheckApp True") ;
              if (socialItem[appObj.appDB] == true) {  // toggled on
                console.log("socialItem True") ;
                appObj.loginApp().then(function () {  // login failed
                  // THIS IS NOT WORKING, fails on `then`
                  socialItem[appObj.appDB] = false ;  // turn toggle off
                } ;
              } else {            // user toggled off
                console.log("socialItem False") ;
                appObj.logoutApp() ;
              }
            } else if (response == false) {  // social app IS NOT installed
              console.log("CheckApp False") ;
              socialItem[appObj.appDB] = false ;  // turn toggle off
              appObj.disableApp() ;
            }
          }) ;
        }
      }

0 个答案:

没有答案