我将一个函数指定为一个对象的一部分,然后需要将该函数作为一个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() ;
}
}) ;
}
}