标签: angular-promise

如何存储带有以任意顺序返回的 Promise 的 for 循环的计数?

我正在发出一系列 http 请求,当它们返回时,我需要将结果归档到列表对象中。我正在使用角度承诺。

因为 Promise 只会在 for 循环完成后解析,所以它们都会被归档到列表的最后一个索引中。

for (var i = 0;i < list.length; i+=1) {
    Promise.do(action).then(function(result) {
        list[i] //i is always at last index because the for loop has already completed
    }
}
Run Code Online (Sandbox Code Playgroud)

javascript promise angularjs angular-promise

5
推荐指数
1
解决办法
5141
查看次数

承诺链接和处理不返回承诺链中任何内容的操作

我有一个关于 Javascript 承诺链的问题。假设我在承诺链的某个地方有一个行动。该操作不会返回任何值,但必须在链继续之前完成。

我需要将这个行动包含在一个承诺中吗?我需要这样的东西吗:

$q.when();
Run Code Online (Sandbox Code Playgroud)

请参阅下面我的代码:

...
var goToDashboard = function () {
    //TODO: use $q here?
    $state.go('dashboard');
};
...
activateEmail().then(signinByToken).then(setPersonalInfo).then(goToDashboard).then(somethingElse).catch(reportProblem);
Run Code Online (Sandbox Code Playgroud)

有人可以建议吗?

angularjs angular-promise

5
推荐指数
1
解决办法
824
查看次数

ES6 Promise 不更新 AngularJS DOM

我无法理解角度分量范围。如果我做类似的事情:

function myComponent(){
  this.data = 'Hello World';
}

let myModule = angular.module('myModule', []);

myModule.component('myComponent', {
  template: `<div>{{$ctrl.data}}</div>`,
  controller: myComponent
});
Run Code Online (Sandbox Code Playgroud)
    <script data-require="angularjs@1.5.8" data-semver="1.5.8" src="https://opensource.keycdn.com/angularjs/1.5.8/angular.min.js"></script>
<div ng-app="myModule">
  <my-component></my-component>
</div>
Run Code Online (Sandbox Code Playgroud)

它打印得很好......现在,如果我做一个小的修改并使其异步:

function myComponent(){
  Promise.resolve().then(_ => {
    this.data = 'Hello World';
  });
}

let myModule = angular.module('myModule', []);

myModule.component('myComponent', {
  template: `<div>{{$ctrl.data}}</div>`,
  controller: myComponent
});
Run Code Online (Sandbox Code Playgroud)
<script data-require="angularjs@1.5.8" data-semver="1.5.8" src="https://opensource.keycdn.com/angularjs/1.5.8/angular.min.js"></script>
<div ng-app="myModule">
  <my-component></my-component>
</div>
Run Code Online (Sandbox Code Playgroud)

它不打印任何东西。我可以使用点击处理程序更改该值,但对于 http 和其他异步操作,它不起作用。

javascript angularjs es6-promise angular-promise

5
推荐指数
2
解决办法
1686
查看次数

forEach 内的承诺返回

function getNamesById(nameIds) {
    var defer = $q.defer();

    var result = [];
    nameIds.forEach(function (nameId) {
        account.getNameById(nameId).then(function (name) {
            result[nameId] = name;
        });
    });
    defer.resolve(result);
    return defer.promise;
}
Run Code Online (Sandbox Code Playgroud)

我上面的代码显然没有按预期工作。我必须迭代一个 id 数组并构造另一个以 id 作为键的数组,以及从异步函数获取的值

javascript promise angularjs angular-promise

5
推荐指数
1
解决办法
2709
查看次数

如何在 Promise then() 函数中访问类变量?

我正在一个 Angular4 + PHP 网站上工作,在那里我使用 Promise 向服务器发送 HTTP 请求,因为我希望我的应用程序根据服务器的响应执行路由。我想访问 then() 中的一个类变量,但它会引发undefined()错误。

这是我的代码:

status = false;

checkUser(): Promise<any>{
// .....
    return this.http
        .get('http://localhost:8000/api/user', this.options)
        .toPromise()
        .then(this.extractData)
        .catch(this.handleError);
}

private extractData(res: any) {
    data = res.json();
    this.status = data.status; // here it throws error undefined 
    return this.status; 
}
Run Code Online (Sandbox Code Playgroud)

有没有其他方法可以实现这一点?

http typescript angular-promise angular

5
推荐指数
1
解决办法
4640
查看次数

异步承诺返回未定义或区域感知承诺

调用返回承诺的函数时,除非删除异步运算符,否则返回未定义,然后返回 ZoneAwarePromise,但不包含任何数据。

我知道查询在函数执行时返回数据,但是它似乎没有将该数据传递给函数调用的实际返回部分。

我查看了几个没有回答这个问题的堆栈问题,包括这个问题: Async/Await with Request-Promise Returns Undefined

这是使用 REST 端点来提取数据,console.logs 确实显示数据是正确的,但是返回未定义

     this.allPeople.forEach(async person => {
          const dodString = await this.getRelatedRecords(person); //undefined
    }
Run Code Online (Sandbox Code Playgroud)

这是返回承诺/数据的主要功能

async getRelatedRecords(person) {
    // function truncated for clarity
    // ...
    //
    console.warn('This async should fire first');
    selPeopleTable.relationships.forEach(relationship => {
    allRelationshipQueries.push(
      arcgisService.getRelatedTableData(
        selPeopleTable.url, [person[oidField.name]], relationship.id, relationship.name),
      );
    });
    await Promise.all(allRelationshipQueries).then(allResults => {
      console.log('Inside the Promise');
      // The Specific node I am looking for
      const data = allResults[1].results.relatedRecordGroups[0].relatedRecords[0].attributes.dod;
    console.log(data); // Shows correctly as the data …
Run Code Online (Sandbox Code Playgroud)

javascript promise typescript angular-promise angular8

5
推荐指数
1
解决办法
4196
查看次数

如何使用angular和JavaScript保证返回一些数据?

我正在尝试从本地存储中获取一些数据,但是我想使用的日期是ready。就像是:

// this belongs to a Helper factory
getData: function(){
        var deferred = jQuery.Deferred();
        setTimeout(function(){
            var data = {
                description: localStorageService.get('description'),
            };
            deferred.resolve()
        }, 10);
        return deferred.promise();
  },

// I set it up so that in the controller I can do
// $scope.data = Helper.getData();
Run Code Online (Sandbox Code Playgroud)

类似于我的示例,我只想在data对象具有description本地存储后返回它

我正在使用angularjs,因此{{data}}一旦解决诺言,我想在我的视图中显示。例如可能使用ng-hide或类似的东西。

无论如何,我的问题是关于建立那个诺言。

有任何想法吗?

javascript local-storage jquery-deferred angularjs angular-promise

4
推荐指数
1
解决办法
2450
查看次数

如何在$ http承诺中抛出错误

我有一个角度服务,包装我的其余api调用并返回$ http承诺.

我的问题是如何抛出一个错误,以便调用触发.error方法的promise?我不想抛出错误,因为我希望它在调用函数中使用.success/.error而不是在它周围执行try catch块.

myFunction: function(foo)
   if (foo) {
      return $http.put(rootUrl + '/bar', {foo: foo});
   }
   else {
      //what do I return here to trigger the .error promise in the calling function
   }
Run Code Online (Sandbox Code Playgroud)

angularjs angular-promise

4
推荐指数
2
解决办法
7285
查看次数

创建自己的angularjs $ q承诺

此示例尝试使同步代码异步.我发现的所有例子都是相反的,除了docs.angularjs.org .. $ q下面的主要第一个例子.

该文档列出了我试图使用的$ q构造函数.不幸的是,jsfiddle Angular库1.1.1和1.2.1提供了一个$ q对象(不是函数),如本例所示.相反,我将提供我的例子,并希望有人会看到这个错误.

https://docs.angularjs.org/api/ng/service/ $ q

我需要看到"这不会发生!" 要执行的行.

f = function(name) {
    return $q(function(resolve, reject) {
        console.log "this does not happen!"
        resolve('great')
    });
}


f(name).then(function(result) {
  console.log 'result', result
}, function(error) {
  console.log 'error', error
});
Run Code Online (Sandbox Code Playgroud)

而不是记录"这不会发生!" 接着是"伟大的",我实际上看到传递给$ q的函数记录::

    result function(resolve, reject) {
        console.log "this does not happen!"
        resolve('great')
    }
Run Code Online (Sandbox Code Playgroud)

谁能看到我做错了什么?

angularjs angular-promise

4
推荐指数
2
解决办法
2885
查看次数

angular ui bootstrap:当模态关闭时,promise已解决/拒绝

我正在使用angular-ui-bootstrap桥库进行角度和bootstap.我想要实现的是重用模态组件并将其包装在一个promise中,当模态成功关闭(按下OK按钮时)或拒绝模式(cancel按下按钮或在模态外按下按钮)时,它将被解析.

据我所知,有$modal来自桥库的服务,它只有一种方法:open(options).还有内置的角度承诺实现:$q.我正在寻找一种如何将两者结合起来的方法.

我想要一个自定义组件(服务,工厂?),它将提供一个startFlow返回promise的方法.调用startFlow也会打开bootstrap模式.当模态被关闭(正面或负面)时,承诺将被解决或拒绝.

有人可以暗示如何实现吗?到目前为止,我还没有找到现有的解决方案......

javascript promise twitter-bootstrap angularjs angular-promise

4
推荐指数
1
解决办法
8884
查看次数