AngularJS和服务内部的异步函数

黑灵魂

我在使用异步功能时遇到了这个问题。关键是“执行”不等待NotificationService.confirm回调的返回

我的意思是,这显示了一个PhoneGap警报,但它并不等待评估按下哪个按钮的用户。因此,您可以在控制台中看到输出,undefined而不是false / true / 3值

[编辑]

这是Maxim Shoutin提出的代码,但尚无法正常工作:

NotificationController.js

angular.module('app').controller("NotificationController", function($rootScope) {

    $rootScope.cancel_button = function() {
      var confirm = NotificationService.confirm("Do you want to confirm?", 'Yes!');

      confirm.then(function(result) {
        console.log('Confirm: ' + result);
        if(confirm)   $location.path('/menu');
      }, function(result) {
        console.log('No data returned');
      })
    }

   /* Additional controller code... */
}

NotificationService.js

angular.module('app').factory("NotificationService", function() {

  // Callback function
  var onConfirm = function(button) {
    console.log('Callback function called!!!');
    if(button == 1)       return false;
    else if(button == 2)  return true;
    else if(button == 3)  return 3;
    else                  return false; // dismissed without press button
  };

 return {
     confirm : function(alert_msg, title, buttonsArray) {

        var deferred = $q.defer();

        if(buttonsArray == null) {
             buttonsArray = ['Cancel', 'OK'];
        }

         var data = navigator.notification.confirm(
                        alert_msg,      // message
                        onConfirm,      // callback
                        title,          // title
                        buttonsArray    // buttonsArray
                    );

         deferred.resolve(data);
         return deferred.promise;
      }
  }
}

控制台输出

> Confirm: undefined用户按下按钮之前

> Callback function called!!!AFTER用户按压按钮)

马克西姆·肖斯汀(Maxim Shoustin)

问题是NotificationService.confirm("Do you want to confirm?", 'Yes!');返回承诺(ae异步)。

所以应该是这样的:

var confirm = NotificationService.confirm("Do you want to confirm?", 'Yes!');

// now confirm is a promise
confirm.then(function (result) {
            console.log('Confirm: ' + confirm);

            if(confirm)   $location.path('/round/actual');                                    
                    }, function (result) {
                        alert("Error: No data returned");
                    })    

仅用于演示,我们可以$timeout用来模拟异步调用:

app.factory('NotificationService', function($q,$timeout) {

  // Callback function
  var onConfirm = function(button) {

    var state;

    console.log('Callback function called!!!');
    if(button == 1)       state = 'working!';
    else                  state = false; // dismissed without press button

    return state;
  };


  var factory =  {
     confirm : function(alert_msg, title, buttonsArray) {

       var deferred = $q.defer();

      $timeout(function () {
         var state =  onConfirm(1); // simulate call callback after 3 sec
         deferred.resolve(state);
       }, 3000);

       return deferred.promise;
      }
  }
  return factory;
});

演示版 Plunker

在您的情况下,由于navigator.notification.confirm使用了回调,因此您可以尝试从回调中返回解析

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

AngularJS和服务内部的异步函数

来自分类Dev

多个异步服务调用后的AngularJS函数

来自分类Dev

AngularJS服务,如何在服务函数内部更改服务属性?

来自分类Dev

AngularJS控制器和服务创建

来自分类Dev

在非异步函数内部调用异步函数

来自分类Dev

在AngularJS中使服务异步

来自分类Dev

中止XMLHttpRequest的内部(客户端和服务器)

来自分类Dev

AngularJS在函数内部的摘要

来自分类Dev

如何从内部函数解析外部异步函数

来自分类Dev

创建可重用的AngularJS提供程序和服务

来自分类Dev

离子控制器和服务:“ TypeError:...不是函数”

来自分类Dev

JavaScript:如何在异步内部函数内部返回外部函数?

来自分类Dev

AngularJS服务不是函数

来自分类Dev

在服务内部使用常量-AngularJS

来自分类Dev

Knockout计算函数内部的异步调用

来自分类Dev

在React中的getDerivedStateFromProps内部调用异步函数

来自分类Dev

测试来自RxJS内部的匿名异步函数

来自分类Dev

客户端和服务器之间的同步和异步数据传输

来自分类Dev

使用事件发射器和服务进行跨组件通信的角度异步调用

来自分类Dev

客户端和服务器之间的同步和异步数据传输

来自分类Dev

从异步闭包内部调用的 Swift 函数也是异步的?

来自分类Dev

当函数不在指令内部时,如何将服务传递给AngularJS指令?

来自分类Dev

当函数不在指令内部时,如何将服务传递给AngularJS指令?

来自分类Dev

异步请求中的angularjs简单的.then或$ q服务

来自分类Dev

从对象内部的异步回调内部调用函数

来自分类Dev

AsynTask和服务绑定

来自分类Dev

Angular HttpClient 和服务

来自分类Dev

使用内部函数返回的异步数据返回外部函数的promise

来自分类Dev

javascript-获取函数内部异步函数的返回数据

Related 相关文章

  1. 1

    AngularJS和服务内部的异步函数

  2. 2

    多个异步服务调用后的AngularJS函数

  3. 3

    AngularJS服务,如何在服务函数内部更改服务属性?

  4. 4

    AngularJS控制器和服务创建

  5. 5

    在非异步函数内部调用异步函数

  6. 6

    在AngularJS中使服务异步

  7. 7

    中止XMLHttpRequest的内部(客户端和服务器)

  8. 8

    AngularJS在函数内部的摘要

  9. 9

    如何从内部函数解析外部异步函数

  10. 10

    创建可重用的AngularJS提供程序和服务

  11. 11

    离子控制器和服务:“ TypeError:...不是函数”

  12. 12

    JavaScript:如何在异步内部函数内部返回外部函数?

  13. 13

    AngularJS服务不是函数

  14. 14

    在服务内部使用常量-AngularJS

  15. 15

    Knockout计算函数内部的异步调用

  16. 16

    在React中的getDerivedStateFromProps内部调用异步函数

  17. 17

    测试来自RxJS内部的匿名异步函数

  18. 18

    客户端和服务器之间的同步和异步数据传输

  19. 19

    使用事件发射器和服务进行跨组件通信的角度异步调用

  20. 20

    客户端和服务器之间的同步和异步数据传输

  21. 21

    从异步闭包内部调用的 Swift 函数也是异步的?

  22. 22

    当函数不在指令内部时,如何将服务传递给AngularJS指令?

  23. 23

    当函数不在指令内部时,如何将服务传递给AngularJS指令?

  24. 24

    异步请求中的angularjs简单的.then或$ q服务

  25. 25

    从对象内部的异步回调内部调用函数

  26. 26

    AsynTask和服务绑定

  27. 27

    Angular HttpClient 和服务

  28. 28

    使用内部函数返回的异步数据返回外部函数的promise

  29. 29

    javascript-获取函数内部异步函数的返回数据

热门标签

归档