Tag: es6 promise

在不调用'then'的情况下parsingPromise

我有这个代码是我为一个名为Poolio的NPM模块写的一个小API的一部分。 对于那些支持错误优先callback以及承诺的人来说,我所遇到的问题似乎是一个常见问题,我们如何在维护API和来自API的一致返回值的同时支持这两个问题? 例如,如果我有条件地从我的API返回一个承诺,取决于我的lib的消费者是否提供callback,在我看来这有点尴尬。 lib的用户可以提供callback或使用Promisefunction,但不能同时使用。 这是我的lib导出的函数,我想promisify: Pool.prototype.any = function (msg, cb) { var workId = this.counter++; var self = this; return new Promise(function (resolve, reject) { if (typeof cb === 'function') { self.resolutions.push({ workId: workId, cb: cb }); } else { self.resolutions.push({ workId: workId, resolve: resolve, reject: reject }); } if (this.available.length > 0) { var […]

从KOA中间件内的承诺中调用yield

我正在编写一个KOA中间件,以便从mongo中提取用户信息,如果它没有被caching的话。 我收到以下错误: “this.getUser”函​​数返回一个ES6承诺,如果没有使用请求caching,则从mongo获取用户,或创build一个新的匿名用户。 module.exports = function* securityMiddleware(next) { this.getUser(this.request) .then((user)=>{ if(user.isAonymous){ //throw 401 access error }else{ yield next; } }); }; 这是无效的,因为:jshint说生成器必须有一个yield并抛出一个SyntaxError:意外的严格模式保留字。 你如何在KOA中间件生成器中使用promise? 我正在使用KOA v1.2.0。

nodejs承诺错误的使用

我做错了,对节点j来说很新,所以请和我一起裸照。 环境:Windows7上的节点v5.1.0。 我试图发送数据发布到publish_url 。 我想在init或catch的catch中运行另一个函数。 但是不要触及那些部分。 打印“调用成功处理函数”和“调用失败句柄函数”不被调用。 请告诉我我做错了什么? var request = require('request'); var publish_url = "https://some_server.com"; function publish_data(url, data) { return new Promise(function (resolve, reject){ request.post( url, { json: {"handshake":{"data":data}} }, function (error, response, body) { if (!error && response.statusCode == 200) { console.log(body); resolve(body); } else { console.log("Error:",body); reject(body); } } ); }); } […]

装饰Javascript Promise.then,使参数函数获得额外的参数

我有以下使用ES6 Promise的代码: const ctx = {} Promise.resolve() .then(() => doSomethingWith(ctx)) .then((retValue) => doSomethingElseWith(retValue, ctx)) 我希望能够做到这样的事情: const ctx = {} using(ctx) .then((ctx) => doSomethingWith(ctx)) .then((retValue, ctx) => doSomethingElseWith(retValue, ctx)) 首先,我有这样的东西: function using(ctx) { const p = Promise.resolve() p.then = (fn) => withCtx(fn, ctx) return p } function withCtx (fn, ctx) { const p = new Promise((resolve) […]

这两个promises语法的区别

我在这两种答复方式之间相当困惑,有人能解释一下这个区别吗? 我试图find一些谷歌的行踪,但无法find完全匹配。 var a = Promise.resolve('foo'); return a.then(); VS return Promise.resolve('foo').then();

如何处理循环和承诺?

我在循环中使用Promised。 我试图做一个循环,但迭代器(当然)与循环改变。 let fctPromise = (i) => { return new Promise((resolve, reject) => { setTimeout(() => { resolve(true + "//" + i) }, parseInt(i) * 1000) }); } var arr = [5, 3, 4, 2, 1]; for (var i of arr) { fctPromise(i).then(value => console.log(value, "////", i)) } 循环正常工作,它通过数组。 但是i正在改变我应该改变我正在接受的方式吗?

等待2个允诺在一个函数中同时使用

首先:我希望我的问题还没有被问及其他地方的回答…我一直在寻找和networking上,我似乎无法find任何东西(也许这是不可能的)。 基本上,我试图build立一个数据库(在我的情况下与蒙戈)从webAPI(密码交换Kraken)获取信息。 目标是用我从请求中得到的各种对象构build我的集合。 这里的gitub回购: MongoNode 这里是当前的代码(我现在使用简单的callback和请求:链接一切): // External Modules var request = require('request'); var yargs = require('yargs'); var _ = require('underscore'); var async = require('async'); var MongoClient = require('mongodb').MongoClient, co = require('co'), assert = require('assert'); // Own Modules // Variables var tickerArr= [] // Generator function for connection co(function*() { // Connection URL var url […]

重构承诺级联与传递的结果

我正在创build一个节点CLI的初稿,以运行docker堆栈和容器。 每个调用都是使用docker命令进行的,具有asynchronous调用和结果。 所以我们决定使用promise。 我们现在的主要问题是当时的着名问题,特别是当我们必须传递价值观,并开始推动纺纱/信息的时候。 这是我们主要的丑陋的方法。 我试图弄清楚这可以被重构为更可读! upgradeServiceImage({env, stack, service}) { if (!env || !stack || !service) { throw Error(`You must specify env, stack and service to upgrade a service`); } let payloadSpinner = ora({ text: `Getting upgrade payload. Please wait…` }).start(); this.getServiceUpgradePayload({env, stack, service}) .then((response) => { payloadSpinner.succeed(`Upgrade payload retrieved successfuly for service ${stack} > […]

所有承诺解决后执行承诺

我已经写了一些遍历目录的代码,选取所有的jpg文件,重命名它们,创build拇指文件夹,并将它们放在该文件夹中。 我也编写了一个函数,每个图像生成一个html块,在forEach循环结束时应该把所有的输出写入一个文件。 // Read the directory fs.readdir(dir, function (err, files) { // Return the error if something went wrong if (err) { console.log("Something went wrong"); } //Make thumbs dir fs.mkdirSync(thumbsFolder); // For every file in the list files.forEach(function (file) { var extension = path.extname(file); if (extension === ".jpg") { //Rename images var renameTask = renameImages(file, […]

节点callback承诺与asynchronous/等待

我试图编写一个简单的函数,将节点式callback函数转换为承诺,所以我可以使用它们与asynchronous/等待。 当前代码: function toPromise(ctx, func, …args) { let newPromise; args.push((err, res) => { newPromise = new Promise((resolve, reject)=> { if(err) reject(err); else{ resolve(res) }; }); }); func.apply(ctx, args); return newPromise; } 示例用法: const match = await toPromise(user, user.comparePassword, password); //trying to avoid the following: user.comparePassword(password, (err, res) => { … }); 这可能与一些伟大的图书馆没有任何意义,但我只是试图编码这是一个练习。 问题当然是匹配评估未定义,显然promise会在await语法行之后得到解决。 任何想法如何解决这个问题?