Tag: es6 promise

节点asynchronous脚本有时会意外结束

我有一个节点脚本调用很多进程打包文件。 大多数情况下,这种方法很好,但是偶尔也可能(每5次电话中平均有1次),它只停在中间,总是在同一个地方。 具体而言,失败时的日志结尾如下所示: Finished task 1! Compiling jsajax.js… Compiling apps.js… 我没有得到任何错误或任何东西,所以我不知道甚至看什么。 这里的设置是我的主文件(index.js)使用co和生成器来调用所需的asynchronous进程,并产生结果。 其中的一部分是吞噬,这是发生这个问题的地方。 我在这里包含了调用代码和gulp任务,因为剩下的代码太长,无法显示所有内容。 如果您认为需要的话,我很高兴收录更多。 谢谢! 调用函数: const createJS = function* createJS () { try { yield gulpFile.createJS(); return 0; } catch(err) { console.error(err); return CONSTANTS.ERROR; } }; 吞噬任务: const createJS = function () { const buildProps = PropertiesReader('build.properties'), distLoc = buildProps.get('distLoc'), installLoc = buildProps.get('installLoc'), […]

NodeJS违反诺言

使用ES6 Promise,如何在以下场景中打破它? addClient: function(request, response, next) { var id = mongo.validateString(request.body.id); mongo.Test.findOne({ id: id }) .then(client => { if (client) { // want to break here response.status(400).send({ error: 'client already exists' }); } else { return auth.hashPassword(mongo.validateString(request.body.secret)); } }) .then(hashedSecret => { // gets executed even if I don't return anything return new mongo.Test({ name: […]

何时使用callback和承诺?

我是NodeJs和JS的新手。 我编写我的第一个应用程序使用callback无处不在,我到达了一个状态,我不能处理嵌套callback数量(callback地狱)。 所以我search了解决scheme,并且我看到Promise是解决这个问题的最好方法之一。 顺便说一句,这是一个很好的解释对于那些有兴趣的人: https : //blog.risingstack.com/node-js-async-best-practices-avoiding-callback-hell-node-js-at-scale/ 因此,我使用Promise对最重要的函数进行了重构,效果很好。 但是,我不知道是否应该重构所有的应用程序。 JS开发人员现在如何做? 他们在任何地方都使用Promise,或者他们大部分时间都在使用callback,只有在嵌套callback过多时才使用Promise。 对此有最佳做法吗?

未处理的Promise拒绝警告:TypeError:第一个参数必须是string或缓冲区

问题似乎是重复的,但我一直在努力解决这个从最近3个小时。 基本上我使用supertest & mocha来testing我的API。 我无法理解哪个承诺没有得到解决。 app.post('/todos', (req, res) => { var todo = new Todo({ text : req.body.text }); todo.save().then( (doc) => { res.status(200).send(doc) }, (e) => { res.status(400).end(e); }); }); 以下是我写的testing: const expect = require('expect'); const request = require('supertest'); var {app} = require('./../server'); var {Todo} = require('./../models/todo'); // Setup database beforeEach((done) => { Todo.remove({}) […]

ES6asynchronous/等待在课堂上

我试图创build一个类,将发送一个请求(login),保存cookie和使用该cookie进行其他操作,如下载文件。 我创build了一个本地服务器,它将接收一个带有用户名和密码的post方法,一个名为/download的路由器只在用户login时才被访问,否则会返回you need to log in 。 问题:这是我class的原型(之前): const request = require('request-promise-native') class ImageDownloader { constructor(username = null, password = null) { this.username = username this.password = password this.cookie = request.jar() this.init() } init() { // login and get the cookie } download() { // needs the cookie } query() { // needs the cookie […]

Angular2的简单运行抛出一个错误与es6-promise.Promise

我试图运行Angular 2 Alpha 45(' https://code.angularjs.org/2.0.0-alpha.45/angular2.dev.js '),但它在“es6Promise._setAsap”失败,说es6Promise是未定义。 var es6Promise = require('es6-promise').Promise; // es6-promise asap should schedule microtasks via zone.scheduleMicrotask so that any // user defined hooks are triggered es6Promise._setAsap(function(fn, arg) { global.zone.scheduleMicrotask(function() { fn(arg); }); }); 当前页面是: <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <script src="javascripts/system.js"></script> <script> System.config({ map: { 'es6-shim':'javascripts/es6-shim.js', 'angular2/angular2': […]

将BlueBird同步链接在一个数组中

我试图让一系列的同步执行的承诺,链接在一起,但只有基于条件添加某些承诺。 下面是我的意思的例子: const Promise = require('bluebird') const funcA = int => new Promise( res => res(++int) ) const funcB = int => new Promise( res => res(++int) ) const funcC = int => new Promise( res => res(++int) ) let mainPromise = funcA(1) // Only execute the funcB promise if a condition is true if( […]

Node.js – 使用Promise.all()加载和执行多个函数

我正在开发一个“插件”的概念,我有一系列的文件,每个文件包含一个单一的function(插件)。 我想使用promise.all()自动加载和执行这些。 问题:每个插件函数都不执行。 这里是我的例子plugin plugins/example.js : "use strict"; exports = function() { return new Promise(function(resolve, reject) { console.log("Plugin running…."); setTimeout(resolve, 200, 'example plugin succeeded!'); }); }; 从我的app.js中,然后使用require-all NPM模块加载所有插件: const plugins = require('require-all')(__dirname + '/plugins'); 然后我尝试执行所有的作为我的承诺链的一部分: return Promise.all([plugins]); 没有logging从function发生。 有趣的是,当我loginplugins的内容,我看到和空对象: { "example": {} } 任何人都可以build议为什么示例函数没有被调用?

尽pipe使用await关键字,返回promise的方法还没有完全执行?

我是JavaScript新手,积极学习。 我正在调用一个方法,它使用await关键字从ES2016类的asynchronous方法中返回一个promise: export default class MyClass extends Model { async getReport() { const value = await xlsx.save(await this._getReportFileName()); console.log('await keyword returned method value'); console.log(`The value is: ${value}`); return true; } } 任何人都可以发现为什么该方法执行之前有机会执行其逻辑,并在调用之前执行的原因。 await关键字似乎不等待实际返回的承诺,并且输出到控制台的值始终未定义。 Object xlsx是具有方法save的类File的一个实例: export default class File { save(filename, options) { writer.save(this, filename, options); } } 这是调用保存帮助器方法的代码: function save(xlsx, filename, options) { return […]

Node.js vs Browser:链接被拒绝的承诺

如果我在Chrome版本56.0.2924.87(64位)上试用此项 – 预期结果.. Promise.reject(null).then(console.log); > Promise {[[PromiseStatus]]: "rejected", [[PromiseValue]]: null} 而如果我尝试节点v7.8.0 – 可能的错误? Promise.reject(null).then(console.log); > Promise { <pending> } 我做错了什么或者这是一个错误? (我假设前者) 我有麻烦通过处理链嘲笑拒绝的承诺,因为拒绝不通过链:( 查看MDN文档,我想我已经得到了正确的语法: https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then