标签: angular-promise

使用 Angular 1 应用程序管理 Typescript 中的 ES6/2015 Promise

我们有一个使用 Typescript 构建的 Angular 1.5 应用程序,我正在尝试找出处理 ng.IPromise 与 Promise(ES6 Promise)的最佳方法。我的偏好是只处理 ES6 Promise 类型。是否有一种优雅的方法来覆盖所有 Angular-JS 和 Angular-Material(也包括)接口以使用 es6 Promise?

我能想到的选项:

  1. 使用一些 d.ts 魔法来做到这一点(可以做到吗?)
  2. 随处转换为 ES6 Promise(有效,但不直观)
  3. 为开源做出贡献,分叉 ng 和 ng 材料的类型,并使它们返回 ES6 Promise 的类型(我可能应该这样做,但不确定我现在有时间进行兔子洞)

澄清

角度应用程序使用的底层 Promise 实现仍然是 $q (不过,我也在应用 Angular-bluebird-promises)。我只是想简化/整合涉及的 Typescript 接口。

angularjs typescript es6-promise angular-promise

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

Angular2 将服务方法从回调更改为异步

我启动了一个简单的 Angular2 Electron 应用程序,并且有一个查询本地 SQL Server 数据库的服务方法。到目前为止一切正常。现在我试图获取对我的组件的服务数据库调用的结果并以某种方式显示它。

问题是查询逻辑写的比较多的是回调语法:

sql.query(sqlString, (err, result) => {
    ...
    callback(result);
    ...
});
Run Code Online (Sandbox Code Playgroud)

我很难重写它以返回承诺,因为结果始终位于查询命令函数的结果参数内。我的组件如下所示:

export class LinkDocRetriever {

  constructor(private myService: MyService) {  }

  results = "";

  loadMyData(id: number): void {

    let tcData = this.myService.getMyData();
    tcData.forEach(element => {
      this.results += element.FileName + " " +  "....\n";
    });

  };
}
Run Code Online (Sandbox Code Playgroud)

我的服务如下所示:

import { Injectable } from "@angular/core";
import * as sql from "mssql";

@Injectable()
export class MyService {

    getMyData():Array<MyItem> {

        let myData:Array<MyItem> = [];

        let config = { …
Run Code Online (Sandbox Code Playgroud)

javascript asynchronous angular-promise angular

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

迭代控制器中返回的角度资源

我有一个访问资源的控制器,Tag如下所示:

$scope.tags = Tag.query();
Run Code Online (Sandbox Code Playgroud)

解析为东西这样:

$scope.tags = [
  { name: "tag1", label: "Tag1" },
  { name: "tag2", label: "Tag2" },
  { name: "tag3", label: "Tag3" },
  { name: "tag4", label: "Tag4" },
];
Run Code Online (Sandbox Code Playgroud)

对于此特定控制器,返回的标记应具有其他属性"active": true,例如{ name: "tag1", label: "Tag1", active: true }.

一旦解决了添加此布尔值,我如何迭代返回的promise?

mapping angularjs angular-promise

3
推荐指数
1
解决办法
3222
查看次数

突破Angularjs的承诺

我试图找到一种方法来突破AngularJS代码中的承诺链.显而易见的方法是返回一个对象,然后检查链中每个"then"函数的有效性.

我想找到一种更优雅的方式来突破当时的链条.

break angularjs q angular-promise

3
推荐指数
1
解决办法
3412
查看次数

$ q:默认拒绝处理程序

我想返回一个$ q实例,这样如果客户端没有使用拒绝处理程序调用'then',那么默认运行.

例如,假设默认为 alert(1)

然后mypromise.then(function(result){...})将提醒1,但mypromise.then(null, function(reason){alert(2)})会提醒2

javascript promise angularjs angular-promise

3
推荐指数
1
解决办法
426
查看次数

HTTP拦截器中的角度HTTP

我需要将必要的HMAC标头附加到请求中.这应该不是很困难,但我开始感到沮丧.以下代码有什么问题.我正在进行的实际http调用; 我自己运行了这个调用,它返回了必要的数据.它在拦截器内部不起作用.

我只是希望在为此拦截器添加白名单或黑名单以及其他可自定义数据之前使当前实现正常工作.这不是关于hmac的问题,而是有了承诺.

此拦截器中的错误是整个承诺行从$ http(...)开始.当我删除此块并按原样使用它(减去承诺执行)它工作正常.一旦我取消注释该线就会卡在一个循环中并崩溃铬.我读过的每个地方都说它是如何完成的,但这显然不起作用.

function requestInterceptor(config){
  var $http = $injector.get('$http');
  var deferred = $q.defer();

  $http.get(hmacApiEndpoint, {cache: true}).then(function(data){
    console.log('HMAC - Success', data)
    deferred.resolve(config)
  }, function(config){
    console.log('HMAC - Error', config)
    deferred.resolve(config)
  })

  return deferred.promise;
}

return {
  request: requestInterceptor
};
Run Code Online (Sandbox Code Playgroud)

这是否与angulars $ http promise与'$ q'不同的实现有关?

javascript angularjs angular-http-interceptors angular-promise

3
推荐指数
1
解决办法
747
查看次数

Angular promises`all`方法返回`undefined`

我已经使用该$q服务与Angular建立了一个承诺.

var get = function() {
    var defer = $q.defer();
    setTimeout(function() {
        defer.resolve('test');
    }, 1000);
    return defer.promise;
}
Run Code Online (Sandbox Code Playgroud)

当我调用此函数时,它返回预期的数据,如下所示:

var promise1 = api.get().then(function(data){
    console.log(data); //logs test
});

var promise2 = api.get().then(function(data){
    console.log(data); //logs test
});
Run Code Online (Sandbox Code Playgroud)

但是当我使用这个all方法时,我得到一个包含undefined两次的数组.

$q.all([promise1, promise2]).then(function(data){
    console.log(data); //logs [undefined, undefined];
});
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么吗?

javascript angularjs angular-promise

3
推荐指数
1
解决办法
1238
查看次数

在JSON对象中转换promise

我将服务返回的承诺转换为控制器时出现问题.我想要的是从promise中包含的数据创建一个JSON对象数组.这是我在控制器中收到的内容: 控制器收到的数据

以下是用于打印该数据的行:

console.log("controller unmatched: ", unmatched.getData(sFilter));
Run Code Online (Sandbox Code Playgroud)

这里"无与伦比"是服务,而getData()就是它的功能.

谢谢!

javascript json angularjs angular-promise

3
推荐指数
2
解决办法
2万
查看次数

如何在AngularJS中使用axios库

为什么axios回调更改显示在angularjs中而不使用$ apply

我试着爱可信图书馆angularjs,当我看到改变我很惊讶$scope被角检测到爱可信回调。我以为我必须打个电话$apply,例如在使用时setTimeout

  // axios example
  axios.get(url).then((response) => {
    // Here I don't need $apply, why??
    $scope.axiosResult = response.data;
  });


  // setTimeout example
  setTimeout(() => {
    // Here I need $apply for the timeoutResult to appear on the HTML
    $scope.$apply(() => $scope.timeoutResult = {message: "timeout!"});
  }, 2000)
Run Code Online (Sandbox Code Playgroud)

您知道为什么$apply在axios中不需要吗?

编辑:

georgeawg的评论帮助我看到了我$http在其他地方使用的信息,因此我猜测由触发的摘要循环$http也有助于axios回调被“消化”。

angularjs angular-promise axios

3
推荐指数
1
解决办法
2786
查看次数

角5:类型'void'的参数未分配给类型'{} |的参数 PromiseLike &lt;{}&gt;'


这是我的代码:

public resetDefaults() {
  return new Promise ((resolve, reject) => {
    resolve(
      this.resetFilters()
    )
  }).then(()=> {return this.cachedFilters});
}

private resetFilters() {

}
Run Code Online (Sandbox Code Playgroud)

this.resetFilters()是给我:

类型'void'的参数未分配给类型'{} |的参数。PromiseLike <{}>'

我知道如果我这样做:

private resetFilters(): Promise<any> {

}
Run Code Online (Sandbox Code Playgroud)

它将消除该错误,但随后我必须在该方法中创建一个新的Promise。我只希望能够调用一个函数而不必添加任何其他promise。 我确实需要的无极resetDefaults()虽然

javascript typescript angular-promise angular

3
推荐指数
1
解决办法
9751
查看次数