例如 p = new Promise(function (resolve, reject) { throw 'err'; }); p.done(); 在大多数承诺的polyfill库中,done会抛出一个错误,并且当前的执行会退出。 但是,如果我们使用p.then() ,什么都不会发生。 这个错误被诺言吞噬了。 如果我们使用p.catch ,我们无法退出当前的执行。 我想实现这样的事情: try { // something } catch (err) { if (check(err)) { throw err; } }
关于这两个重要来源: 新西兰 – 承诺诺言链条和MDN诺言 ,我想问一下: 每次我们从promise履行处理程序返回一个值时,该值是如何传递给从同一个处理程序返回的新的promise的? 例如, let p1 = new Promise(function(resolve, reject) { resolve(42); }); let p2 = new Promise(function(resolve, reject) { resolve(43); }); let p3 = p1.then(function(value) { // first fulfillment handler console.log(value); // 42 return p2; }); p3.then(function(value) { // second fulfillment handler console.log(value); // 43 }); 在这个例子中, p2是一个承诺。 p3也是p1履行处理程序的承诺。 然而p2 !== […]
我想了解如何debugging基于promise的asynchronous代码。 承诺我的意思是基于ECMAScript 6的承诺,通过debugging我的意思是使用内置的铬或Firefoxdebugging器。 我遇到的麻烦是,当出现错误时,无论如何“拒绝”,我都无法得到堆栈跟踪。 我试过这些: console.log(new Error('Error occured')); throw new Error('Throwing an Error'); return new Error('Error returned by the onRejected function'); reject(new Error('Pass Error to the reject function')); 但是,这些都不会返回代码中的实际错误或堆栈跟踪。 所以我的问题是 – 如何正确debuggingJavaScript承诺?
我有一组Promise.all(arrayOfPromises); 我继续承诺链。 看起来像这样 existingPromiseChain = existingPromiseChain.then(function() { var arrayOfPromises = state.routes.map(function(route){ return route.handler.promiseHandler(); }); return Promise.all(arrayOfPromises) }); existingPromiseChain = existingPromiseChain.then(function(arrayResolved) { // do stuff with my array of resolved promises, eventually ending with a res.send(); }); 我想添加一个catch语句来处理单个承诺,以防万一它出错,但是当我尝试时,Promise.all返回它find的第一个错误(忽略其余部分),然后我无法从其余的数组中的承诺(即没有错误)。 我试过做一些像.. existingPromiseChain = existingPromiseChain.then(function() { var arrayOfPromises = state.routes.map(function(route){ return route.handler.promiseHandler() .then(function(data) { return data; }) .catch(function(err) { […]
我有一个纯JavaScript的Promise(内置实现或poly-fill): var promise = new Promise(function (resolve, reject) { /* … */ }); 从规范来看,一个承诺可以是下列之一: “解决”和“解决” “解决”和“拒绝” “待定” 我有一个用例,我希望同步询问Promise并确定: 是无极的解决? 如果是的话,Promise是否解决了? 我知道我可以使用#then()来安排在Promise更改状态后asynchronous执行的工作。 我不是问如何做到这一点。 这个问题具体是关于对诺言状态的同步审问 。 我怎样才能做到这一点?
承诺,只是例如 var P = new Promise(function (resolve, reject) { var a = 5; if (a) { setTimeout(function(){ resolve(a); }, 3000); } else { reject(a); } }); 我们打电话之后再承诺的方法: P.then(doWork('text')); doWork函数看起来像这样: function doWork(data) { return function(text) { // sample function to console log consoleToLog(data); consoleToLog(b); } } 我如何避免doWork中的内部函数,从promise和text参数访问数据? 如果有什么窍门? 谢谢。
我一直在使用ES6 Promise。 通常,承诺是这样构build和使用的 new Promise(function(resolve, reject){ if (someCondition){ resolve(); } else { reject(); } }); 但为了灵活性,我一直在做下面这样的事情。 var outsideResolve; var outsideReject; new Promise(function(resolve, reject) { outsideResolve = resolve; outsideReject = reject; }); 然后 onClick = function(){ outsideResolve(); } 这工作正常,但有一个更简单的方法来做到这一点? 如果不是,这是一个很好的做法?
无论是ES6承诺还是蓝鸟承诺,Q承诺等等。 我如何testing以查看给定对象是否是Promise?
我有一个HTTP API,在成功和失败时都返回JSON数据。 一个例子失败将如下所示: ~ ◆ http get http://localhost:5000/api/isbn/2266202022 HTTP/1.1 400 BAD REQUEST Content-Length: 171 Content-Type: application/json Server: TornadoServer/4.0 { "message": "There was an issue with at least some of the supplied values.", "payload": { "isbn": "Could not find match for ISBN." }, "type": "validation" } 我想在我的JavaScript代码中实现的是这样的: fetch(url) .then((resp) => { if (resp.status >= 200 && […]
假设我有一个Promise.all()来处理两个promise。 如果一个承诺产生一个错误,但另一个承诺,我希望能够处理Promise.all()已经解决后的情况的基础上的错误。 ES6承诺错过了解决方法,我假设有一个很好的理由。 但是我不禁想到.settle()方法会让这个问题更容易。 我是以这种错误的方式去做的,还是用一种解决方法扩展ES6的承诺是正确的事情呢? 我想如何使用.settle()一个例子: Promise.all([Action1,Action2]) .settle(function(arrayOfSettledValues) //if 1 failed but not 2, handle //if 2 failed but not 1, handle //etc…. )