Tag: 承诺

打字稿:错误TS2693:“承诺”只是指一种types,但在这里被用作一个值

我正在尝试为我的AWS Lambda使用Typescript,并且在使用Promise的时候出现以下错误。 错误TS2693:'承诺'只是指一个types,但在这里被用作一个值。 我尝试在代码中使用以下变化 使用Promise构造函数 responsePromise = new Promise((resolve, reject) => { return reject(new Error(`missing is needed data`)) }) 使用Promise.reject responsePromise = Promise.reject(new Error(`Unsupported method "${request.httpMethod}"`)); 版本 以下是我的开发依赖项中的版本: "typescript": "^2.2.2" "@types/aws-lambda": "0.0.9", "@types/core-js": "^0.9.40", "@types/node": "^7.0.12", tsconfig.json的内容 { "compileOnSave": true, "compilerOptions": { "module": "commonjs", // "typeRoots" : ["./typings", "./node_modules/@types"], "target": "es5", // "types" : [ […]

我怎样才能同步确定JavaScript Promise的状态?

我有一个纯JavaScript的Promise(内置实现或poly-fill): var promise = new Promise(function (resolve, reject) { /* … */ }); 从规范来看,一个承诺可以是下列之一: “解决”和“解决” “解决”和“拒绝” “待定” 我有一个用例,我希望同步询问Promise并确定: 是无极的解决? 如果是的话,Promise是否解决了? 我知道我可以使用#then()来安排在Promise更改状态后asynchronous执行的工作。 我不是问如何做到这一点。 这个问题具体是关于对诺言状态的同步审问 。 我怎样才能做到这一点?

TypeError:无法读取未定义的属性'then'

loginService.islogged() 上面的函数返回一个像“失败”的string。 但是,当我尝试运行然后function,它会返回错误 TypeError: Cannot read property 'then' of undefined 光标在connected之后,之前即表示。 以下是全部function: var connected=loginService.islogged(); alert(connected); connected.then(function(msg){ alert("connected value is "+connected); alert("msg.data value is "+msg.data); if(!msg.data.account_session || loginService.islogged()=="failed") $location.path('/login'); }); UPDATE 这是islogged()函数 islogged:function(){ var cUid=sessionService.get('uid'); alert("in loginServce, cuid is "+cUid); var $checkSessionServer=$http.post('data/check_session.php?cUid='+cUid); $checkSessionServer.then(function(){ alert("session check returned!"); console.log("checkSessionServer is "+$checkSessionServer); return $checkSessionServer; }) } 我确信$checkSessionServer将导致一个“失败的”string。 而已。

节点JS Promise.all和forEach

我有一个像暴露asynchronous方法结构的数组。 asynchronous方法调用返回数组结构,依次公开更多的asynchronous方法。 我正在创build另一个JSON对象来存储从这个结构获得的值,所以我需要注意跟踪callback中的引用。 我已经编写了一个powershell解决scheme,但我想学习一个更习惯或干净的解决scheme。 该模式应该是可重复的n层嵌套。 我需要使用promise.all或一些类似的技巧来确定何时解决封闭的例程。 并不是每个元素都必然会涉及到一个asynchronous调用。 所以在一个嵌套promise.all我不能简单地分配给我的基于索引的JSON数组元素。 不过,我确实需要在嵌套的forEach中使用promise.all之类的东西,以确保在parsing封装程序之前完成所有属性分配。 我正在使用蓝鸟诺言,但这不是一个要求 这是一些部分代码 – var jsonItems = []; items.forEach(function(item){ var jsonItem = {}; jsonItem.name = item.name; item.getThings().then(function(things){ // or Promise.all(allItemGetThingCalls, function(things){ things.forEach(function(thing, index){ jsonItems[index].thingName = thing.name; if(thing.type === 'file'){ thing.getFile().then(function(file){ //or promise.all? jsonItems[index].filesize = file.getSize();

Angular的$ q.reject()vs deferred.reject()

我试图得到Angular $q服务及其相关对象和API的处理。 当我看我的控制台中的对象时,我看到: var deferred = $q.defer() …(and then from console inspection)… $q: Object {defer: function, reject: function, when: function, all: function} deferred: Object {resolve: function, reject: function, notify: function, promise: Object} deferred.promise: Object {then: function, catch: function, finally: function} 它提出了几个问题: $q.reject()和deferred.reject()什么区别? 何时使用每个? deferred.promise.then(successFn, errorFn)的catchFn与deferred.promise.catch(catchFn)的catchFn之间的关系是什么? 如果我有一堆嵌套的承诺,并发生错误,将最外面的catch()函数总是被调用? 如果其中一个嵌套的承诺也有一个catch函数定义呢? 该捕获是否会阻止最外层的catch执行? 谢谢。

Angular JS:如何绑定到promise

我正试图将一个承诺绑定到一个观点上。 我不知道你是否可以直接做到这一点,但这正是我想要做的。 任何想法我做错了什么? 注意:源代码有点过时了,并使用静态数据,但是这样可以使代码更易于诊断。 编辑: JSFiddle页面: http : //jsfiddle.net/YQwaf/27/ 编辑:解决scheme:原来,你可以直接绑定承诺。 我的原始代码有两个问题: 使用setTimeout()而不是angular度的$超时是一个问题。 Angular不知道在触发超时时需要刷新UI(可以使用$ scope解决这个问题,也可以在setTimeout中使用$ apply,也可以使用$ timeout) 绑定到返回承诺的函数是一个问题。 如果第二次被调用,这又是一个承诺。 更好的办法是将范围variables设置为承诺,并根据需要创build新的承诺。 (在我的情况下,这是在国家代码中调用$ scope。$ watch) HTML: <div ng:controller="addressValidationController"> Region Code <select ng:model="regionCode" ng:options="r.code as r.name for r in getRegions()"/> Country Code<select ng:model="countryCode"><option value="US">United States</option><option value="CA">Canada</option></select> </div> JS: function addressValidationController($scope, $q) { var regions = { US: [{code: 'WI',name: […]

Koa / Co / Bluebird或Q / Generators / Promises / Thunk相互影响? (Node.js)

我正在研究与Koa部分构build一个Web应用程序,但是我并没有完全理解Hors,Whens,以及在哪些方面可以select – 应用 – 支持“使asynchronous更简单”的技术/方法下面列出)。 总的来说,networking上关于这个问题的不同指导仍然让事情变得模糊,特别是在不断发展的最佳实践方面,或者至less是更好的方面,以及在什么情况下。 networking上似乎没有什么东西可以把它全部放在上下文中。 我希望对这个庞大的屁股蔓延的post的反应可以纠正这一点 。 也许下面的问题可以激发人写一个彻底的博客文章或类似的东西来解决这个问题。 我的感觉是,我甚至不接近唯一会从中受益的人。 因此,如果明智的社群能帮助解答以下关于下列技术的问题(以粗体显示)并提供清晰的话,我会很高兴: – a)他们如何以及在何种情况下(如适用)互相补充,补充,替代和/或重叠解决scheme? – b)它们在速度性能,error handling简易性和debugging方便性方面有什么权衡? – c)什么时候,何地以及为什么使用“这个”与“那个”技术,技术组合,和/或方法更好? – d)哪些技术或方法(如果有的话)可能是“明星”。 (希望能够很好地解释作为答案一部分的意见。) ============================== 技术: * Koa * 我的理解: Koa是构buildNode应用程序的基础,它利用了ECMAScript-6特性,其中一个特性是生成器。 * Co * 我的理解: – Co是一个运行ECMAScript-6生成器的实用程序库(它本来就是Node .011和谐的),其目标是允许编写样板代码来运行和pipe理生成器。 Co本质上是Koa(?)的一部分。 具体问题: – 如果和如何在Koa中使用Co,而不是在非Koa中使用Co。 换句话说,Koa整个门面Co? – 如果有更好的发电机库,Co可以replace成Koa发电机库吗? 有没有? *承诺“Q”和蓝鸟等图书馆* 我的理解: – 如果并且直到Node本身运行这个规范,它们在某种意义上就是用于实现Promises / A +规范的“polyfills”。 – 他们还有一些非规范的便利工具来促进使用许诺,比如Bluebird的promisfyAll工具。 具体问题: – […]

与承诺循环

用承诺做一个while循环的习惯用法是什么? 所以: 如果情况仍然存在,请做一些事情再重复一遍,然后做一些其他的事情。 dosomething.then(possilblydomoresomethings).then(finish) 我这样做,我想知道是否有更好的/更多的idomatic方法? var q = require('q'); var index = 1; var useless = function(){ var currentIndex = index; console.log(currentIndex) var deferred = q.defer(); setTimeout(function(){ if(currentIndex > 10) deferred.resolve(false); else deferred.resolve(true); },500); return deferred.promise; } var control = function(cont){ var deferred = q.defer(); if(cont){ index = index + 1; useless().then(control).then(function(){ deferred.resolve(); }); } […]

在AngularJS http处理错误然后构造

在使用AngularJS“http get then”构造(承诺)时,如何处理HTTP错误,例如500? $http.get(url).then( function(response) { console.log('get',response) } ) 问题是,对于任何非HTTP响应,不调用内部函数。

我怎样才能按顺序执行promise的数组?

我有一系列的承诺,需要按顺序运行。 var promises = [promise1, promise2, …, promiseN]; 调用RSVP.all将并行执行它们: RSVP.all(promises).then(…); 但是,我怎样才能顺序运行它们? 我可以像这样手动堆叠它们 RSVP.resolve() .then(promise1) .then(promise2) … .then(promiseN) .then(…); 但是问题是promise的数量是不一样的,promise的数组是dynamic的。