如何使异步承诺同步?

时间:2017-05-17 02:07:32

标签: javascript

当我调用这个函数时,我得到了一堆未定义的apkPkg。当我把BP的时候我打破了apkName,appVersion,appBuild和appID,但由于所有这些都是承诺,apkPkg已经被执行并且将有一堆未定义。问题1:如何同步此异步操作,以便apkPkg具有良好的值。 Q2:我可以使用注释代码,以使这个紧凑和git摆脱额外的变量? 请指教,谢谢

 this.getUserInfo = function () {
          var apkName, appVersion, appBuild, appID;
          $cordovaAppVersion.getAppName().then(function (name) {
            apkName = name;
          });
          $cordovaAppVersion.getVersionNumber().then(function (version) {
            appVersion = version;
          });
          $cordovaAppVersion.getVersionCode().then(function (build) {
            appBuild = build;
          });
          $cordovaAppVersion.getPackageName().then(function (ID) {
            appID = ID;
          });
          /*
          $cordovaAppVersion.getAppName().then(function (apkName) {});
          $cordovaAppVersion.getVersionNumber().then(function (appVersion) {});
          $cordovaAppVersion.getPackageName().then(function (appID) {});
          $cordovaAppVersion.getVersionCode().then(function (appBuild) {});
          */
          var apkPkg = apkName + " Version " + appVersion + " Build: " + appBuild + " ID: " + appID;
          return apkPkg;
};

抱歉,我试着把它放在评论中并且搞砸了。所以我把它放在这里这是一个合乎逻辑的方法。 $ q对我来说是新的,我的理解是$ q将同步异步调用。这是人们在其他情况下也可以使用的一个非常通用的例子。:

this.getUserInfo = function () {
    return $q.all([
      $cordovaAppVersion.getAppName(),
      $cordovaAppVersion.getVersionNumber(),
      $cordovaAppVersion.getVersionCode(),
      $cordovaAppVersion.getPackageName()
    ]).then(function (appInfo) {
      var apkPkg = appInfo[0] + ' Version ' + appInfo[1] + ' Build: ' + appInfo[2] + 
        ' ID: ' + appInfo[3]
      return apkPkg
    })
  }

0 个答案:

没有答案