Articles of 承诺

我如何发送表单与请求承诺?

我正在尝试使用request-promise库或类似的任何东西,通过从节点发送到另一台运行Node的机器发送文件。 使用正常的请求模块,我可以这样 var req = request.post(url, function (err, resp, body) { if (err) { console.log('Error!'); } else { console.log('URL: ' + body); } }); var form = req.form(); form.append('file', '<FILE_DATA>', { filename: 'myfile.txt', contentType: 'text/plain' }); 这个代码来自这个问题: 在Node.js中使用POST请求上传文件,但是它不使用promise。 任何人都可以解释如何做同样的事情,但与请求承诺库,或者如果有任何其他方式promisify呢?

有关Javascript承诺回报的最佳实践

我是新的承诺,我想知道哪个是最好的做法与本地诺言(NodeJs)。 我在下面放了一些代码来更好地理解这个问题: CODE_A function foo(condition) { return new Promise((resolve, reject) => { if(condition){ resolve('Promise result!'); } else { reject('Promise rejected!'); } }); } CODE_B function foo(condition) { return new Promise(() => { if(condition){ return Promise.resolve('Promise result!'); } else { return Promise.reject('Promise rejected!'); } }); } 哪一个是最好的select,以便返回一个承诺? 有一些最佳实践规则要遵循?

使用ES6的顺序迭代承诺

我期待下面的node.js代码将按以下顺序打印输出 1000 2000 3000 4000 "All tasks completed" 而是按照下面提到的顺序打印 "All tasks completed" 1000 2000 3000 4000 代码 'use strict'; var tasks = [1000, 2000, 3000, 4000]; var promise = Promise.resolve(); function test() { tasks.forEach(function(task) { promise = promise.then(function() { setTimeout(function() { console.log(task); }, task); }); }); } test(); promise.then(function() { console.log('All tasks completed'); }); 需要修改哪些内容才能完成“所有任务”。 […]

那么在最后的承诺之间有什么区别呢?

我finally看到了蓝鸟的文档,但是我还是不太明白与then的差别。 要清楚:我确切地知道为什么then被catch后被调用。 我想让它在被捕之后被调用。 这是意图。 我的问题是:如果我希望代码总是被执行,而不pipepromise的状态如何, then vs finally的区别是什么呢? 我build立了这个testing: var Promise = require("bluebird"); function test1 () { console.log("RESOLVE + THEN + CATCH + THEN"); return new Promise((resolve, reject) => resolve()) .then(() => console.log("then")) .catch(err => console.log("error:", err.message)) .then(() => console.log("end")); } function test2 () { console.log("REJECT + THEN + CATCH + THEN"); return new Promise((resolve, […]

防止吞咽错误的ES6承诺(不使用.catch)

我不想为每个使用的承诺input.catch。 没有做这个承诺所造成的错误是极其无益的。 纯粹为了这个目的而使用像蓝鸟这样的整个库让我感到不舒服。

如何使用诺言来做串行任务?

所以我有4个任务: getStatus() , updateStatus(A) , getTask() , updateTask() ,它应该以这种方式执行: getStatus(function(status) { // A updateStatus(status, function(status) { // B getTask(function(task) { // C updateTask(task, function(task) { // D }) }) }) }) 所以为了避免callback地狱,我用诺言,现在所有这四个任务都返回一个诺言,然后我改变了这个方式 getStatus().then(function(status) { // A updateStatus(status).then(function(status) { // B getTask().then(function(task) { // C updateTask(task).then(function(task) { //D }) }) }) }) 正如你所看到的,它仍然是then hell , 我对Promise做错了什么?

Promise Chain Breaks w / .all()

我是相当新的承诺,并认为我处理了事情,但显然我没有。 下面的代码是为了获取X个表名(getTableName()),将它们传递给getData()并遍历每个表来获取数据。 然后,我调用Promise.all()来解决这些问题,并尝试将数据传递给链中的下一个链接(createFile()),但Promise.all()在移至createFile()后parsing。 这是“反模式”回来咬我的例子吗? 如果是这样的话,你们有没有人可以build议我应该如何重组,以便我能够完成我所要做的事情? 谢谢! exports.getRawDataForExport = function(data) { return new Promise(function(resolve, reject) { var getTableName = function() { return knex('monitored_parameter') .where('device_id', data.device_id) .whereIn('internal_name', data.param) .select() .then(function(rows) { if(rows) { var runningResult = {}; for(var i = 0; i < rows.length; i++) { var tbl = {"table" : 'monitored_parameter_data_' + rows[i].id, "param" : rows[i].display_name}; […]

如何避免使用setTimeout来等待Promise解决?

我有一个subreddit我想parsing所有日常线程的意见。 要做到这一点,我必须得到线程ID。 我使用snoowrap作为api包装。 我正在困难地考虑节点的asynchronous性。 当我打电话给subreddit.search({query: 'Daily General Discussion – ' + date}) ,我得到一个承诺。 然后我解决承诺获得线程ID并推送到一个新的数组(我试着用arr[i] = a[0].id保存值,但只有最后的结果被存储在我的数组, Promise.resolve在我的for循环之后被调用)。 如何在Promise解决之前停止执行其余的代码? 使用setTimeout似乎效率低下,不可靠,因为parsing时间可能比我的setTimeout时间长。 下面的代码工作,我只是想避免使用setTimeout。 const subreddit = reddit.getSubreddit('subreddit') let numberOfDaysBack = 50; let arrIds = new Array(0); for (var i = 0; i < numberOfDaysBack; i++) { let date = moment().subtract(0+i, 'days').format('MMMM D, YYYY') let dailyThread = subreddit.search({query: 'Daily […]

如何确定在Node.js中导致UnhandledPromiseRejectionWarning的原因?

我已经在asynchronous/等待库的基础上构build了Node.js应用程序,并且在大多数情况下工作得很好。 我遇到的唯一麻烦是,只要承诺没有完成,我就会得到以下错误的一些变化: (node:83333) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 2): TypeError: Cannot read property '_id' of null 我无意中能够find违规的承诺,但有时需要进行相当多的debugging。 有没有一种方法可以用来检查未处理的承诺的行号? 会救我很大的头痛。

如何处理需要两个asynchronous方法的node / express的请求

我正在学习节点。 我有一个web应用程序,通过比特币包与bitcoind连接,通过knex与PostgreSQL 连接 。 我需要从每个模块获取一些数据,然后将其全部传递给我的视图进行渲染。 我的代码看起来像这样到目前为止: exports.index = function(req, res){ var testnet=''; bitcoin.getInfo(function(e, info){ if(e){ return console.log(e);} if(info.testnet){ testnet='bitcoin RPC is testnet'; }else{ testnet='nope.. you must be crazy'; } var c=knex('config').select().then(function(k){ res.render('index', { title: k[0].site_name, testnet: testnet }); }); }); }; 这样做的结构方式,首先等待比特币回复,然后将请求发送到PostgreSQL,然后等待一段时间回复。 这两个等待期可能会同时发生。 但是,我不知道如何做与承诺/callback在Javascript中。 我怎样才能pipe理这种asynchronous发生,而不是连续发生?