Tag: 承诺

asynchronous摩卡testing(与Chai断言库)应该失败,但被标记为通过

我已经在TypeScript中使用mochatesting框架和chai断言库(我对这三者都是新手)写了一些testing,并看到引发了一个错误,并在下面的代码中调用了assert.fail()。 但是,testing仍然被标记为通过。 我很困惑,为什么会这样呢,如果我在承诺上做错了什么。 另外,如下所示,还有一个UnhandledPromiseRejectionWarning。 我不明白为什么这被标记为未处理,因为我已经包括一个catch块。 我将不胜感激关于如何解决这个问题的build议,谢谢! User.all() .then((users) => { expect(users.length).to.equal(0); return User.create('test@test.email', '12345', 'test', true, true); }) .then(() => { return User.all(); }) .then((users) => { expect(users.length).to.equal(1); }) .catch((error) => { assert.fail(); }); debugging控制台 ✓ should create a new record with existing e-mail in the database (node:29903) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 3): […]

让我们等待几秒钟后再回来

我有一个函数返回一个承诺。 在这个function中,我们呼叫第三方供应商通过他们的服务器发送一些推送通知。 看起来像 apiGetLoggedInUser.then( user => { return sendMessage(user.name); } ) 不过,我们决定等3秒后再调用sendMessage函数。 但是,我们不想改变sendMessage,因为它提供了。 我想知道如何在这种情况下真正做“等待”部分,因为诺言是用来删除“同步”操作。 我理解正确吗? 我该怎么办?

RxJS方法导致callback地狱

我想在下面的用例中使用ReactiveJS Observable方法。 IF MAIN_CACHE EXIST RETURN OUTPUT ELSE IF DB CONNECTION EXIST CACHE MAIN_CACHE (1 Hour) CACHE FALLBACK_CACHE (3 Days) RETURN OUTPUT ELSE IF FALLBACK_CACHE EXIST RETURN OUTPUT 我得到了预期的输出,但我觉得这导致了Callback Hell ,我认为,仍然不是一个好的方法,我错过了ReactiveJS Observable关键好处。 下面是我的代码,整个代码在JS Bin Link中 mainCache.subscribe(function (response) { console.log(response); }, function (error) { dbData.subscribe(function (response) { console.log(response); }, function (error) { console.log('DB CAL Log info', […]

Promises + async.js

我总是阅读使用承诺与async.js不是一个好主意。 我想明白为什么。 我正在使用async.eachLimit来控制文件中asynchronous操作的限制,并承诺在完成所有asynchronous操作后返回结果。 例: const maxOfAsync = process.env.maxOfAsync || 500; return new Promise((resolve, reject) => { async.eachLimit(arrayOfFiles, maxOfAsync, (file, callback) => { callExternalLib(file).then((data) => { file.data = data; callback(); }).catch((error) => { callback(error); }); }, (error) { if (error) return reject(error); resolve(arrayOfFiles); }); }); 如果我不应该一起使用,如何达到相同的结果? 让我们忘记asynchronous/等待一分钟,然后返回只有Promises和async.js存在的日子。 我能做什么? 谢谢。

调用nodeJS将数据保存在文件中,但获取空的内容

我有nodeJS文件,做一些东西,并保存结果在JSON文件。 'use strict'; var Promise = require('promise'); var jsonfile = require('jsonfile'); //npm install –save jsonfile // … function writeFile(filename, obj) { return new Promise(function (resolve, reject) { jsonfile.writeFile(filename, obj, {spaces: 5}, function (err, obj) { if (err) { reject(err); } else { resolve(); } }); }); } writeFile("test.json",{a:"xxxx"}).then(function (results) { }) 但由于某种原因,我得到空文件。 但是,如果我使用写入文件同步: jsonfile.writeFileSync(filename, obj, […]

如何在超出范围时退还承诺?

我想从AWS S3asynchronous检索多个文件,所以我使用Promises。 我正在使用AWS S3来检索文件。 但是,实现超出了范围。 我收到以下错误; ReferenceError: reject is not defined 在这种情况下返回一个Promise的正确方法是什么?如何用S3返回的数据提供一个files的关键字? var getFiles = function getFiles(files) { return Promise.all(files.map(function(file) { var params = { Bucket: 'my-bucket', Key: file.key } s3.getObject(params, function(err, data) { if (err) reject(err); else { // set key.data = data fulfill(data); } }); })); } var fileNames = ['file1.jpg', 'file2.jpg']; var […]

承诺性能问题。 读文件太慢了

我使用承诺读取硬盘驱动器中的10000多个文件,并在确切的位置find一个数字。 我使用glob来返回文件名,并find每个文件我运行方法readFile(readFile返回作为promisse)。 当所有的文件被处理时,我可以继续我的工作。 function readFilesGlob(globPath,options,progressCallback){ return new Promise(function (fulfill, reject){ glob(globPath, options, function (err, files) { var readPromisses=[]; for(var id in files){ readPromisses.push(readFile(files[id])); } Promise.all(readPromisses).then( function(filesContents){ fulfill(filesContents) } ); }); }); } 所有的承诺都只在完成时才完成,无法显示处理进度 function readFilesGlob(globPath,options,progressCallback){ return new Promise(function (fulfill, reject){ glob(globPath, options, function (err, files) { var readPromisses=[]; for(var id in files){ readFile(files[id]).then(function(data){ //everything shows […]

Node.js处理来自链接的promise的响应

我有3个function,每个function都返回一个承诺。 如何将每个承诺的响应分配给定义的对象? 这是我的代码: const runResponse = { webAudits: [], webJourneys: [], appJourneys: [] }; webAuditsFailures(req) .then( appJourneysFailures(req) ) .then( webJourneysFailures(req) ).then( res.status(201).json({ reports: runResponse }) ); 这是我试过的: webAuditsFailures(req) .then( (response) => { runResponse.webAudits = response }, appJourneysFailures(req) ) .then( (response) => { runResponse.appJourneys = response }, webJourneysFailures(req) ).then( (response) => { runResponse.webJourneys = response }, […]

Node.Js保证redirect不起作用

我有一个设置页面,您可以插入和删除一些filter。 对于删除请求,我使用了这个: $('#delete-filter').click(function (e) { var filtername = $('#filter-list').val(); var filterCount = $('#filter-list option').length; var retVal = confirm("Are you sure to delete this filter?"); if( retVal == true ){ $.ajax({ url: "/settings?filtername=" + filtername, method: 'DELETE', dataType: "json", success: function (result) { } }); } else{ return false; } }); 这是我的路线为这个页面: router.delete('/settings', ensureAuthenticated, function (req, […]

完成一个承诺,在开始下一个,在一个长长的名单

我最近发现了JavaScript的承诺。 广告的好处是干净的嵌套链接然后从句。 我的代码按预期工作,但嵌套增长就像我使用callback时一样丑陋。 有没有更好的方法来使用链接然后删除所有这些嵌套? 注意我需要在任务n + 1中的任何事情可以开始之前完成任务n。 非常简单的固定例子 'use strict'; function P1() { return new Promise((resolve) => { console.log("starting 1") setTimeout(() => { console.log("done 1") resolve(); }, 100) }) } function P2() { return new Promise((resolve) => { console.log("must start 2 only after 1 is done") setTimeout(() => { console.log("done 2") resolve(); }, 50) }) […]