我想澄清这一点,因为文件不太清楚; Q1: Promise.all(iterable)是顺序还是并行处理所有的promise? 或者更具体地说,它就像运行链式承诺一样 p1.then(p2).then(p3).then(p4).then(p5)…. 还是其他types的algorithm,其中所有p1 , p2 , p3 , p4 , p5等被同时调用(并行),并且一旦所有parsing(或一个拒绝)就返回结果? 问题2:如果Promise.all并行运行,有没有一种方便的方法来按顺序运行一个迭代器? 注意 :我不想使用Q或Bluebird,但所有原生ES6规格。
假设我有这个代码 function y(resolve, reject) { console.log("Result"); resolve(); } var promise = new Promise(y); 我想知道的是函数y是否会被asynchronous执行。
试图找出如何find像async.eachSeriesfunction完全一样的东西,我需要按顺序(不是并行)运行的asynchronous操作列表,但无法find一种方法来执行本地ES6,任何人都可以build议,请? PS想到发电机/产量,但没有经验,所以我没有意识到它可以帮助我。 编辑1 每个请求,这里是一个例子: 假设这个代码: let model1 = new MongooseModel({prop1: "a", prop2: "b"}); let model2 = new MongooseModel({prop1: "c", prop2: "d"}); let arr = [model1 , model2]; 现在,我想以一系列的方式运行它,而不是平行运行,所以使用“asynchronous”NPM很容易: async.eachSeries(arr, (model, next)=>{ model.save.then(next).catch(next); }, err=>{ if(err) return reject(error); resolve(); }) 我的问题是:用ES6,我可以做到吗? 没有NPM的“asynchronous”包? 编辑2 与asynchronous/等待它可以很容易地完成: let model1 = new MongooseModel({prop1: "a", prop2: "b"}); let model2 = new […]
假设我有以下代码。 function divide(numerator, denominator) { return new Promise((resolve, reject) => { if(denominator === 0){ reject("Cannot divide by 0"); return; //superfluous? } resolve(numerator / denominator); }); } 如果我的目标是尽早使用reject退出,那么我是否应该养成立即return的习惯?
为什么我不能在catchcallback中抛出一个Error ,让进程像在其他任何作用域一样处理错误? 如果我不做console.log(err)没有打印出来,我什么都不知道发生了什么。 这个过程刚刚结束… 例: function do1() { return new Promise(function(resolve, reject) { throw new Error('do1'); setTimeout(resolve, 1000) }); } function do2() { return new Promise(function(resolve, reject) { setTimeout(function() { reject(new Error('do2')); }, 1000) }); } do1().then(do2).catch(function(err) { //console.log(err.stack); // This is the only way to see the stack throw err; // This does nothing […]
使用本机(ES6) Promise 。 我应该拒绝一个错误 : Promise.reject(new Error('Something went wrong')); 或者我应该拒绝一个string: Promise.reject('Something went wrong'); 浏览器行为有什么不同?
查看MDN,它看起来像传递给Promise.all then()callback函数的值。所有的值都按照promise的顺序。 例如: var somePromises = [1, 2, 3, 4, 5].map(Promise.resolve); return Promise.all(somePromises).then(function(results) { console.log(results) // is [1, 2, 3, 4, 5] the guaranteed result? }); 任何人都可以引用一个规范,说明应该在哪个顺序values ? PS:像这样运行的代码表明,这似乎是真的,虽然这当然没有证据 – 这可能是巧合。
有没有清除JavaScript Promise实例的.then的方法? 我在QUnit之上编写了一个JavaScripttesting框架。 该框架通过在Promise运行每个testing来同步运行testing。 (对不起,这个代码块的长度,我尽我所能评论,所以感觉不那么乏味) /* Promise extension — used for easily making an async step with a timeout without the Promise knowing anything about the function it's waiting on */ $$.extend(Promise, { asyncTimeout: function (timeToLive, errorMessage) { var error = new Error(errorMessage || "Operation timed out."); var res, // resolve() rej, // reject() t, […]
我必须做一个fetch()的序列Promise:我一次只有一个url,这意味着只有一个fetch() promise。 每次我收到一个json,这个包含另一个json的url,所以我必须做另一个fetch()承诺。 我能够与多个承诺,但在这种情况下,我不能做Promise.all() ,因为我没有所有的url,但只有一个。 这个例子不起作用,它全部冻结。 function fetchNextJson(json_url) { return fetch(json_url, { method: 'get' }) .then(function(response) { return response.json(); }) .then(function(json) { console.log(json); return json; }) .catch(function(err) { console.log('error: ' + error); }); } function getItems(next_json_url) { if (!(next_json_url)) return; get_items = fetchNextJson(next_json_url); interval = $q.when(get_items).then(function(response) { console.log(response); next_json_url = response.Pagination.NextPage.Href; }); getItems(next_json_url); } var […]
我想运行相同的行动,无论我的Promise是否成功解决。 我不想将相同的函数绑定到.then两个参数上。 是不是像jQuery一样。 如果不是,我该如何做到这一点?