Tag: promise

从promise块返回函数中的值

我正在尝试编写一个函数(使用WebdriverJS lib)遍历元素列表,检查名称并构build与该名称相对应的xpath定位器。 我在这里简化了xpath定位器,所以不要留意。 我在这里遇到的问题是:1)调用这个函数返回undefined。 据我所知,这是因为return语句不在其位置上,而是:2)将它放在一个正常的同步代码正常工作的地方,不适用于asynchronouspromise,因此调用此函数将返回同样未定义,但是因为return语句在“driver.findElement”语句之前触发。 如果我想通过调用这个函数得到createdTaskvariables,我应该如何在这里使用return语句? var findCreatedTask = function() { var createdTask; driver.findElements(By.xpath("//div[@id='Tasks_Tab']")).then(function(tasks) { for (var index = 1; index <= tasks.length; index++) { driver.findElement(By.xpath("//div[@id='Tasks_Tab'][" + index + "]//div[@class='task-title']")).getText().then(function(taskTitle) { if (taskTitle == "testName") { createdTask = "//div[@id='Tasks_Tab'][" + index + "]"; return createdTask; } }); } }); };

dynamic数组承诺序列

我得到dynamic(承诺的数量可以改变每个运行时)承诺数组,现在我希望每个决心或拒绝之后处理返回的承诺之前承诺数组将完成。 我承诺尽全力,但是在所有的承诺完成之后,这一切都将继续下去。 如果数组(承诺)不是dynamic的,所以我可以简单地使用这样的事情,但我不知道我在数组中有多less承诺,我希望在每一个承诺履行或…继续与它的答案而不是等到所有的承诺完成 firstMethod() .then(secondMethod) .then(thirdMethod); 我们正在使用Q … 可能吗 ? 更新(示例) 可以说我有promise数组 [promise1,promise2,promise3, promiseN] 现在我要用promise1完成处理, 然后不等所有的承诺完成。 这里最大的问题是数组可以有N个承诺,我不知道在RT多less诺言,我会得到,直到我得到这个数组, 因此我不能简单地使用 更新2 (澄清更多:-)) 棘手的部分… 如果我事先知道数组的大小,那么我可以简单地使用数组5链中的条目,但是这里的棘手部分是,我不知道在承诺数组中有多less承诺… 。

简单的Q承诺节点的例子

我试图把我的头围绕Q库/承诺一般,所以我可以在我的节点应用程序中实现它,但我很难find一些简洁和具体,足以快速入门。 有人可以帮助我把这个代码翻译成一个使用Q的承诺库的asycronous模式吗? // # For those new to coffeescript // # '(params) ->' === 'function (params) {}' in coffeescript // # '@' === 'this' in coffeescript // # NPM Q = require 'q' // # Database class module.exports = class Database constructor: () -> // # mongoose @mongoose = require('mongoose') // # Make database connection […]

在Q中学习承诺和例外与拒绝

我的印象是,承诺内的exception会触发后续的失败处理程序,但在这段代码中看不到它发生: var Q = require('q'); function x() { console.log('x'); var deferred = Q.defer(); setTimeout( function() { console.log('resolving x'); deferred.resolve('hi'); }, 1000 ); return deferred.promise; } function y() { console.log('y'); var deferred = Q.defer(); setTimeout( function() { console.log('throwing in y'); throw new Error('Oih!'); }, 1000 ); return deferred.promise; } x().then(y).then( function () { console.log('yes'); }, function […]

为什么这个node-mysql插入产生一个数组?

根据node-mysql 文档 ,向具有auto_increment主键的表中插入行的结果是一个对象,其中一个字段是insertId。 但是,我没有看到这在运行下面的代码。 相反,我看到结果是一个两个元素的数组,其第一个元素是所需types的对象,但其第二个元素是undefined 。 特别是,下面的代码打印: [ { fieldCount: 0, affectedRows: 1, insertId: 12, serverStatus: 2, warningCount: 0, message: '', protocol41: true, changedRows: 0 }, undefined ] 任何人都可以解释文档和观察到的行为之间的差异吗? 码: var mysql = require("mysql") var Q = require("q") var db = { "host": "localhost", "user": "root", "password": "xyz", "database": "study" } var pool = mysql.createPool(db); […]

如何使用nodejs pg-promise库将具有uuid数组的logging插入到pg表中

我需要在我的数据库中有一个表,其中包含一个单一的列是一个uuid对象(uuid []types的数组) 但是当我尝试使用名为pg-promise的nodejs库插入到它时,它失败 我得到以下错误消息告诉我,我需要重写演员或expression式 {"name":"error","length":206,"severity":"ERROR","code":"42804","hint":"You will need to rewrite or cast the expression.","position":"230","file":"src\\backend\\parse r\\parse_target.c","line":"510","routine":"transformAssignedExpr"} 这是奇怪的,因为我有绝对没有问题,当我尝试进入一个单一的uuid到另一列在同一个确切的表(我没有代表uuid的问题,顺便说一句,我创build它们作为一个文本variables从另一个库,但他们是普通的旧文本variables) 我也没有问题,当我尝试input一个TEXT对象数组到同一列(万一我更改表具有一个TEXT []列而不是UUID []列) 这是我的代码 //////////////// var Promise = require('bluebird'); var pgpLib = require('pg-promise'); var pgp = pgpLib(); var cn = confUtil.pgDbConnectionConfiguration(); var db = pgp(cn); ////////////////// var newEntity={}; newEntity.hash = uuid.v4(); newEntity.location = {X:2394876,Y:2342342}; newEntity.mother = uuid.v4(); newEntity.timestamp = Date.now(); […]

(mongoose/承诺)如何检查文档是否使用findOneAndUpdate和upsert创build

考虑这个代码,我需要创build或更新一个特定的文档。 Inbox.model.findOneAndUpdate({ number: req.phone.number }, { number: req.phone.number, country: req.phone.country, token: hat(), appInstalled: true }, { new: true, upsert: true }).then(function(inbox){ /* do something here with inbox, but only if the inbox was created (not updated) */ }); mongoose是否有设施可以区分文件是否被创build或更新? 我需要new: true因为我需要调用inbox函数。

有承诺的节点程序没有完成

我不能为了我的生活找出为什么这不完成: var pmongo = require('promised-mongo'); var db = pmongo('mongodb://localhost/builder'); var block_id = '538d097bbb12479d0e9f70ab'; var collection = db.collection('block'); collection.findOne({_id:db.ObjectId(block_id)}) .then(function(result) { console.dir(result); }).done(); 它bascially只是挂起。 findOne返回一个承诺,我打电话完成。 奇怪的是,当我closures数据库(即db.close())的时候,它完成。 我试图最终通过快递进行处理,所以我不想closures数据库。 有什么诀窍?

JavaScript承诺和if / else语句

当我使用filemanager函数为目录( / )代码效果很好,但是当我调用文件( /index.html )代码返回一个错误。 我发现if / else语句中的问题(即使isDir返回false , readdir也会运行),但是我不知道如何正确地将它用于promise。 var fs = require('fs'), Q = require('q'), readdir = Q.denodeify(fs.readdir), readFile = Q.denodeify(fs.readFile); function isDir(path) { return Q.nfcall(fs.stat, __dirname + path) .then(function (stats) { if (stats.isDirectory()) { return true; } else { return false; } }); } function filemanager(path) { if (isDir(path)) { return readdir(__dirname […]

如何使parsing查找/保存操作同步?

我们在nodejs中编写服务器代码并使用Parse javascript sdk。 通常我们需要获取或更新各种Parse对象。 例如,获取用户名为“示例”的用户。 function fetchUser(username) { var User = Parse.Object.extend("User"); var query = new Parse.Query("User"); query.equalTo("username",username); query.first({ success: function(results) { console.log("Successfully retrieved " + results.length + " scores."); return results; }, error: function(error) { console.log("Error: " + error.code + " " + error.message); } }); } 这个函数可能被其他函数调用: function test() { var user = […]