Articles of es6 promise

得到第一个履行的承诺

如果我有两个承诺A和B,其中只有一个承诺会成功,我怎样才能获得成功的承诺? 我正在寻找类似于Promise.race东西,但是它只会返回满足的第一个承诺。 我正在使用ES6的承诺。

在React中没有使用ES6获取来定义获取方法

嘿家伙我有我的第一个反应js应用程序中获取函数的麻烦。 这是我的项目的结构: hello-world — app — components — main.jsx — node_modules — public — build.js — index.html — package.json 这是我用npm安装的: npm install react react-dom babel-core babel-loader babel-preset-es2015 babel-preset-react webpack –save-dev npm install –save isomorphic-fetch es6-promise 我使用webpack webpack.config module.exports = { entry: './app/components/main.jsx', output: { path: './public/', filename: "build.js", }, module: { loaders: [ { exclude: […]

从asynchronous获取蓝鸟承诺等待function

我正在寻找一种方法,使用Node v7.6或更高版本,在调用asynchronous函数时获取Bluebird Promise(或任何非本地promise)。 我可以这样做: global.Promise = require('Bluebird'); // Or Q/When var getResolvedPromise = () => Promise.resolve('value'); getResolvedPromise .tap(…) // Bluebird method .then(…); 请参阅: 我可以使用global.Promise = require(“bluebird”) 我希望能够做到这样的事情: global.Promise = require('Bluebird'); // Or Q/When var getResolvedAsyncAwaitPromise = async () => 'value'; getResolvedAsyncAwaitPromise() .tap(…) // Error ! Native Promises does not have `.tap(…)` .then(…); 我知道我可以随时使用这样的东西: Bluebird.resolve(getResolvedAsyncAwaitPromise()) .tap(…); […]

即使在捕获之后,Node.js仍然处于未处理状态

我正在使用节点7.2.1与新的asynchronous/等待function。 我也用这样的mongoose使用本地ES6诺言 – const mongoose = require('mongoose'); mongoose.Promise = global.Promise; 我的代码stream是这样的 – async function getFollowers(){ try { const followers = await User.getFollowersFromMongo(req.params.userId); res.send(followers); } catch (err) { winston.error('Printing Error = ', err); res.status(400).send({success: false, error: err}); } } UserSchema.statics.getFollowersFromMongo = async(userId) => { try { let aggregateQuery = []; //some syntactical error in mongo query […]

对象字面量(散列)与Promise.all

我有一种使用Promise.all就像Promise.all({})而不是更标准的Promise.all([])。 但是这似乎不起作用 Promise.all({a:1,b:2}).then(function(val){ console.log('val:',val); }); 虽然这当然 Promise.all([1,2,3]).then(function(val){ console.log('val:',val); }); (我期望的是为Promise.all映射对象文字的值,但保持键不变。) 但MDN文件的承诺似乎表明,承诺所有将工作任何迭代。 就我所知,一个对象字面{}是一个可迭代的。 那么我错过了什么?

在使用诺言的时候,我还是得到厄运的金字塔,我做错了什么?

我正在使用Node.js的Inquirer库,在使用Promise时,我仍然得到厄运的金字塔,我做错了什么? 查询器库API基本上是: inquirer.prompt([ question1, question2, question3, … questionX ]).then(function(answers){}); 答案是散列,代表每个问题的键。 这里没有什么特别的。 无论如何,使用API​​,我总是得到getAnswersToPrompts().then(function(answers){}) ,保持嵌套在前面的承诺似乎更方便…像这样: function run (rootDir) { return watchHelper().then(function (answers) { return chooseDirs({ allowDirs: answers.allow, originalRootDir: rootDir, onlyOneFile: false }).then(function (pathsToRun) { assert(pathsToRun.length > 0, ' You need to select at least one path.'); return getOptions(availableOptionsForPlainNode).then(function (answers) { const selectedOpts = answers[ 'command-line-options' ]; return […]

如何理解这个Promise代码?

'use strict'; Promise.resolve(() => 'John') .then((args) => { console.log(args); throw new Error('ops') }) .catch((ex) => { console.log(ex) }) .then(() => { throw new Error('ups') console.log('Doe') }) 我想console.log(args); 应输出'John' ,但是当我运行这个代码,输出是[ [Function] ] 所以我很困惑。

与本地承诺循环;

我试图做一个asynchronous循环与本地ES6承诺 这种作品,但不正确的。 我想我在某个地方犯了一个大错,我需要有人告诉我它在哪里以及它是如何正确完成的 var i = 0; //creates sample resolver function payloadGenerator(){ return function(resolve) { setTimeout(function(){ i++; resolve(); }, 300) } } // creates resolver that fulfills the promise if condition is false, otherwise rejects the promise. // Used only for routing purpose function controller(condition){ return function(resolve, reject) { console.log('i =', i); condition ? reject('fin') […]

在MongoDB中使用本地ES6承诺

我知道Mongo的Node驱动程序可以使用外部库进行promisified 。 我很好奇,看看ES6承诺可以用于MongoClient.connect ,所以我尝试了这个(使用Babel 5.8.23 transpile): import MongoClient from 'mongodb'; function DbConnection({ host = 'localhost', port = 27017, database = 'foo' }) { return new Promise((resolve, reject) => { MongoClient.connect(`mongodb://${host}:${port}/${database}`, (err, db) => { err ? reject(err) : resolve(db); }); }); } DbConnection({}).then( db => { let cursor = db.collection('bar').find(); console.log(cursor.count()); }, err => { […]

实施Promise.series作为Promise.all的替代品

我看到Promise.all的这个示例实现 – 它并行运行所有promise – 实现Promise.all 请注意,我正在寻找的function类似于Bluebird的Promise.mapSeries http://bluebirdjs.com/docs/api/mapseries.html 我正在尝试创buildPromise.series,我有这个似乎按预期工作( 它实际上是完全错误的,不使用它,看答案 ): Promise.series = function series(promises){ return new Promise(function(resolve,reject){ const ret = Promise.resolve(null); const results = []; promises.forEach(function(p,i){ ret.then(function(){ return p.then(function(val){ results[i] = val; }); }); }); ret.then(function(){ resolve(results); }, function(e){ reject(e); }); }); } Promise.series([ new Promise(function(resolve){ resolve('a'); }), new Promise(function(resolve){ resolve('b'); }) ]).then(function(val){ console.log(val); }).catch(function(e){ […]