javascript 将标准函数转换为 Promise

标签 javascript promise

我有一个标准函数,可以成功检查是否安装了特定的应用程序。但该函数需要一些时间才能执行,我需要将其绑定(bind)到 promise.then(function (response) { ...}因为应用程序检查器执行时间太长...导致应用程序检查功能的预期响应出现异步问题。但我无法让它工作。

checkSocialApp 仅返回 true 或 false:

function checkSocialApp(objApp) {
  if (device.platform == "iOS") {
    var scheme =  objApp.ios;
  } else {
    var scheme =  objApp.and;
  }
  if (objApp.appName == "Facebook") {
    return true ;  // FB doesn't need app, can be logged in via browser
  } else {
    return appAvailability.check(
      scheme,
      function() {  // success callback
        console.log(scheme + " is Installed") ;
        return true ;
      }, function () {  // Error callback
        console.log(scheme + " is NOT Installed") ;
        alert("You do not have the " +objApp.appName+ " app installed.") ;
        return false ;
      }
    );
  }

  checkSocialApp(appObj).then(function(response){ // errors on 'then'
    if (response == true) {  // app IS installed
      console.log("CheckApp True") ;
      appObj.loginApp() ;
    } else if (response == false) {  // app IS NOT installed
      console.log("CheckApp False") ;
      appObj.disableApp() ;
    }
  }) ;

.then 上出现上述错误。所以我尝试将它绑定(bind)到一个promise.resolve:

var promise1 = Promise.resolve(checkSocialApp(appObj)) ;
promise1.then(function(response) {
   if (response == true) ...

这将执行 checkSocialApp函数成功(因为我看到从该函数内打印了正确的控制台消息),但我没有得到 response回到 .then 的剩余部分进行处理。

最佳答案

你必须做这样的事情,在你的函数中返回一个 promise :

function checkSocialApp(objApp) {
   return new Promise( function(resolve)={
         if (device.platform == "iOS") {
               var scheme =  objApp.ios;
           } else {
               var scheme =  objApp.and;
          }

          if (objApp.appName == "Facebook") {
                   resolve (true) ;  // FB doesn't need app, can be logged in via browser
          } else {
                 return appAvailability.check(
                       scheme,
                           function() {  // success callback
                                 console.log(scheme + " is Installed") ;
                                 resolve (true) ;
                            }, function () {  // Error callback
                                     console.log(scheme + " is NOT Installed") ;
                                     alert("You do not have the " +objApp.appName+ " app installed.") ;
                                  resolve (false) ;
                           }
                    );
        }
   })
}


  checkSocialApp(appObj).then(function(response){ // errors on 'then'
    if (response == true) {  // app IS installed
      console.log("CheckApp True") ;
      appObj.loginApp() ;
    } else if (response == false) {  // app IS NOT installed
      console.log("CheckApp False") ;
      appObj.disableApp() ;
    }
  }) ;

关于javascript 将标准函数转换为 Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48469328/

相关文章:

javascript - 测试捕获 Promise 错误

javascript - jQuery悬停函数不透明动画

javascript - 动态文档对象模型 (DOM) 的后退按钮(历史记录)

javascript - 如何在 Node js 中突破 promise-then 链

javascript - axios 处理错误

javascript - 不确定如何在包含 Promises 的方法中填充数组

javascript - 如何避免显式构造反模式并仍然保持缩进/回调较低

javascript - ng-show - 使用服务作为范围参数

javascript - 如何在javascript中操作多个图像的宽度

javascript - highcharts 范围选择器不显示绘图