如何在 node.js 中实际使用 Q Promise?

     2023-03-08     61

关键词:

【中文标题】如何在 node.js 中实际使用 Q Promise?【英文标题】:How to actually use Q promise in node.js? 【发布时间】:2014-05-05 21:28:54 【问题描述】:

这可能是一个菜鸟问题,但我是新来的承诺,并试图弄清楚如何在 node.js 中使用Q。

我看到tutorial 以

开头
promiseMeSomething()
    .then(function (value) , function (reason) );

但我无法理解.then 的确切来源。我猜它来自

var outputPromise = getInputPromise()
    .then(function (input) , function (reason) );

但是getInputPromise() 来自哪里?我发现以前没有提到它。


我已经将它包含在我的项目中

var Q = require('q');

// this is suppose, the async function I want to use promise for
function async(cb) 
    setTimeout(function () 
        cb();
    , 5000);


async(function () 
    console.log('async called back');
);

在我的示例中如何使用Q 及其.then

【问题讨论】:

你的例子不是一个很好的 Promise 用例。 then 函数附加到 Promise 上,是的,需要一些东西来创建该 Promise。有时图书馆会这样做。这是一个与 MySQL 相关的示例,但您可能会发现 an answer I gave someone 很有帮助,我在其中使用普通回调然后使用 Q 承诺来实现答案,并对 Q 部分进行大量评论以说明正在发生的事情。 相关:***.com/questions/10545087/… 相关***.com/questions/22519784/… 【参考方案1】:

promiseMeSomething()会返回一个Q promise对象,里面会有then函数,也就是defined,像这样

Promise.prototype.then = function (fulfilled, rejected, progressed) 

创建 Promise 对象的最简单方法是使用 Q 函数构造函数,如下所示

new Q(value)

将创建一个新的 Promise 对象。然后,您可以像这样附加成功和失败处理程序

new Q(value)
.then(function(/*Success handler*/), function(/*Failure handler*/))

此外,如果您将单个 nodejs 样式的函数传递给 .then 函数,它将以这样的成功值调用该函数

callback(null, value)

或者如果有问题,那么

callback(error)

对于您的特定情况,setTimeout 接受要调用的函数作为第一个参数。因此,只需要几行代码就可以让它真正与 Promise 一起工作。所以,Q有一个方便的功能,为此,Q.delay,可以这样使用

var Q = require('q');

function async() 
    return Q.delay(1000)


async()
.then(function() 
    console.log('async called back');
);

你可以这样写更短

Q.delay(1000)
    .then(function() 
        console.log('async called back');
    );

如果你想用其他值调用回调函数,那么你可以这样做

Q.delay(1000, "Success")
    .then(function(value) 
        console.log('async called back with', value);
    );

当您希望在两个函数之间有延迟并且第二个函数依赖于第一个函数时,这将很有用。

【讨论】:

使用 Q 在 Node.js 中同步 Promise 的麻烦

】使用Q在Node.js中同步Promise的麻烦【英文标题】:TroubletosynchronisepromisesinNode.jsusingQ【发布时间】:2015-12-3104:49:55【问题描述】:我目前正在使用框架Sails.js在Node.JS中做一个API。我是第一次使用Promise,但在同步我的Promise时遇到了... 查看详情

如何使用node js,reactjs,express从实际网页中的mongodb中获取数据

】如何使用nodejs,reactjs,express从实际网页中的mongodb中获取数据【英文标题】:Howtogetdataoutofmongodbinactualwebpageusingnodejs,reactjs,express【发布时间】:2017-10-0101:35:01【问题描述】:这是我在mongo终端上运行查询后得到的数据db.contacts.f... 查看详情

Node.js 端口 3000 已经在使用,但实际上不是?

】Node.js端口3000已经在使用,但实际上不是?【英文标题】:Node.jsPort3000alreadyinusebutitactuallyisn\'t?【发布时间】:2017-01-1207:44:22【问题描述】:我已经使用node.js项目工作了几个星期,它一直运行良好。通常,我使用npmstart来运行... 查看详情

在 node.js 中测试实际输出是不是是终端

】在node.js中测试实际输出是不是是终端【英文标题】:Testwhethertheactualoutputisaterminalornotinnode.js在node.js中测试实际输出是否是终端【发布时间】:2011-10-2804:05:44【问题描述】:我正在为我的一个程序编写命令行界面,如果合适的... 查看详情

如何使用node.js获取当前目录名并显示在html页面上

】如何使用node.js获取当前目录名并显示在html页面上【英文标题】:Howtogetthecurrentdirectorynameanddisplayitonthehtmlpageusingnode.js【发布时间】:2016-02-0422:43:42【问题描述】:实际上我在index.js文件中有一个路径名。每当我选择目录时,我... 查看详情

译node.js中的依赖注入(代码片段)

目录引子正文使用依赖注入的理由如何使用Node.js依赖注入在实际项目中的依赖注入参考资料引子在DependencyInjection中了解了相关概念,接下来看看在Node中如何使用依赖注入。原文:DependencyInjectioninNode.jsOriginMyGitHub正文依赖注入是... 查看详情

如何在 node.js 域中添加全局发射器?

】如何在node.js域中添加全局发射器?【英文标题】:Howtoaddinnode.jsdomainglobalemitter?【发布时间】:2013-07-2523:17:57【问题描述】:在我的node.js应用程序中,我曾经按域处理错误。该应用的架构如下所示:控制器。快速路由调用控制... 查看详情

如何在 Node.js 中使用 HTTPS

】如何在Node.js中使用HTTPS【英文标题】:HowtouseHTTPSwithNode.js【发布时间】:2014-05-2423:06:27【问题描述】:我没有HTTPS、SSL等方面的经验。我想知道如何通过HTTPS使用Node.js。我知道如何很好地使用node.js,但是使用HTTPS时会出错。我... 查看详情

如何在 Cappuccino 中使用 Node.js?

】如何在Cappuccino中使用Node.js?【英文标题】:HowCanIUseNode.jsWithCappuccino?【发布时间】:2012-08-2704:36:21【问题描述】:我想在Cappuccino中实现一个使用Node.js作为服务器的客户端应用程序。我目前使用Express运行Node:varexpress=require(\'e... 查看详情

为啥在使用promise时使用Q,bluebird框架? [复制]

】为啥在使用promise时使用Q,bluebird框架?[复制]【英文标题】:WhyituseQ,bluebirdframeworkwhenusingpromise?[duplicate]为什么在使用promise时使用Q,bluebird框架?[复制]【发布时间】:2016-07-0214:04:30【问题描述】:在node.js中学习promise的过程中... 查看详情

在node.js中使用rabbitmq系列一helloworld

...队列的实现方案。本篇文章以Node.js为例子,来实际操作如何和RabbitMQ进行交互。介绍RabbitMQ是一个消息代理。它最初的思想特别简单:接受并且转发消息。你可以将它想象为邮局:当你将邮件放到信箱中,你可以非常肯定快件员... 查看详情

如何在 Node.js 中使用 XHR API?

】如何在Node.js中使用XHRAPI?【英文标题】:HowtouseXHRAPIinNode.js?【发布时间】:2016-04-0312:47:39【问题描述】:这是我之前question的后续行动假设我有一些javascript代码,它在客户端(在浏览器中)运行良好。这段代码使用浏览器API... 查看详情

如何使用 Passport.js 在 Node.js 中重置/更改密码?

】如何使用Passport.js在Node.js中重置/更改密码?【英文标题】:Howtoreset/changepasswordinNode.jswithPassport.js?【发布时间】:2013-12-1503:13:30【问题描述】:我在Node.js中使用Passport.js来创建登录系统。一切都很好,但是当他们忘记密码或想... 查看详情

如何在 Node.js 中使用 chmod

】如何在Node.js中使用chmod【英文标题】:HowdoIusechmodwithNode.js【发布时间】:2012-02-0402:41:07【问题描述】:?包fs里面有个方法,应该可以这样,但是不知道第二个参数取什么。fs.chmod(路径、模式、[回调])异步​​chmod(2)。除了可... 查看详情

如何在原生 JavaScript 和 node.js 中使用长轮询?

】如何在原生JavaScript和node.js中使用长轮询?【英文标题】:HowtouselongpollinginnativeJavaScriptandnode.js?【发布时间】:2018-02-0120:27:20【问题描述】:我需要为聊天应用程序实现longpolling。我四处搜索,但我只找到了如何在JavaScript中使... 查看详情

如何使用 node.js 在 mySQL 中进行批量更新

】如何使用node.js在mySQL中进行批量更新【英文标题】:HowdoIdoabulkupdateinmySQLusingnode.js【发布时间】:2016-09-2118:41:14【问题描述】:我想批量更新数据我在节点JS的对象数组中有超过50行要更新。就像是https://github.com/felixge/node-mysql... 查看详情

如何在 Node.js 中使用 ES6 导入? [复制]

】如何在Node.js中使用ES6导入?[复制]【英文标题】:HowcanIuseanES6importinNode.js?[duplicate]【发布时间】:2018-02-0121:31:10【问题描述】:我正在尝试在Node.js中掌握ES6导入的窍门,并尝试使用此示例中提供的语法:CheatsheetLink我正在查看... 查看详情

Node.js 如何在快速路由中使用 socket.io

】Node.js如何在快速路由中使用socket.io【英文标题】:Node.jshowtousesocket.ioinexpressroute【发布时间】:2019-10-1716:43:27【问题描述】:在我的一个node.js脚本中,我尝试在快速路由中使用socket.io。我发现了许多类似的问题,并尝试按照... 查看详情