Articles of asynchronous

Node.js async.parallel,它是平行的吗?

我知道节点依赖于单个事件线程。 所以没有办法让它有并行的线程。 但是async.parallel确实提供了类似并行的function。 Stack上的另一个问题意味着async.parallel正在使用process.nextTick。 所以基本上async.parallel是只是一个并发function,而不是一个真正的并行function?

在javascript中运行一个接一个的函数

我正在使用JavaScript来使用Facebook发送API。 function sendmessage(callback) { for (i = 0; i < recipientId.length; i++) { var messageData = { recipient: { id: recipientId[i] }, message: { text: messageText } }; callSendAPI(messageData, pagetoken, id_notsent); } return callback( ); } function sendstatus() { if (id_notsent.length == 0) { res.statusCode = 200; res.message = "Successfully sent generic message to all […]

是否有一个节点模块的常见模式,需要asynchronous加载大文件才有用?

我不喜欢我见过的任何东西… 模 import lineReader from 'line-reader' let bigFile = './huge-file.csv' export default class DooDad { constructor() { this.dictionary = new Map() // Something like this seems like it'd be nice… // await this.load() } load() { return new Promise((resolve, reject) => { lineReader.eachLine(bigFile, (line, last) => { // this.dictionary = The contents of huge-file.csv }) […]

使用promise和rediscallback

我试图用我在Redis服务器上的东西填充我的var todos ,我得到我必须使用承诺,但我可能不在正确的位置。 首先,我用.smembers()函数获取所有ids,并且为每个id获取具有正确id的对象并将其parsing为todos 。 var todos=[]; res.locals.redis.smembers("todo:20", function(err, reply){ // ie SMEMBERS todo:20 returns 0 and 1 var promises=reply.map(function(elem){ res.locals.redis.get("todo:20:"+elem, function(err, reply1){ // ie GET todo:20:0 return new Promise(function(resolve, reject){ todos.push(JSON.parse(reply1)); resolve(); }); }); }); Promise.all(promises) .then(function(){ res.locals.redis.quit(); res.render('todolist.ejs', {todo: todos}); }) .catch(function(reason){ console.log(reason); }); });

需要帮助相关的asynchronous函数执行stream程(await,promises,node.js)

如果你帮我解决以下情况,我将不胜感激。 给定function: async function getAllProductsData() { try { allProductsInfo = await getDataFromUri(cpCampaignsLink); allProductsInfo = await getCpCampaignsIdsAndNamesData(allProductsInfo); await Promise.all(allProductsInfo.map(async (item) => { item.images = await getProductsOfCampaign(item.id); })); allProductsInfo = JSON.stringify(allProductsInfo); console.log(allProductsInfo); return allProductsInfo; } catch(err) { handleErr(err); } } 这个函数在服务器启动时被触发,它收集来自其他站点的活动信息:获取数据(getDataFromUri()),然后从数据名称和id(getCpCampaignsIdsAndNamesData())中提取,然后获取每个活动的产品图像(getProductsOfCampaign()) ; 我也express.app与下面的一段代码: app.get('/products', async (req, res) => { if (allProductsInfo.length === undefined) { console.log('Pending…'); allProductsInfo = […]

将一组函数asynchronous传递给一个数组

所以我有一个四个JSON对象的数组,我想添加三个新的字段到这些对象的每一个。 要做到这一点,我有一个asynchronous函数添加每个新的字段。 理想情况下,我想要做的就是将asynchronous函数限制为只有两个更新。 然后在最后callback原始函数并打印出新形成的数组。 但我不能得到这个工作,虽然我觉得我很接近… var async = require('async'); // My Array of JSON objects var allIssues = [ { id: '1', color: 'blue' }, { id: '2', color: 'red' }, { id: '3', color: 'gold' } ]; addExtraFeaturesToEachissue(allIssues, function(data) { console.log(data); }); function addExtraFeaturesToEachissue(allIssues, callback) { async.each( allIssues, async.applyEach([addheight, addWidth, addWeight]), callback(data) ); } […]

当使用asynchronous等待,如何指定一个callback?

我正在研究如何在以下方面使用交易: https://node-postgres.com/features/transactions 但在下面的代码示例中: const { Pool } = require('pg') const pool = new Pool() (async () => { // note: we don't try/catch this because if connecting throws an exception // we don't need to dispose of the client (it will be undefined) const client = await pool.connect() try { await client.query('BEGIN') const { rows […]

等待每个承诺后继续循环完成

下面我有两个function。 其中一个回报是一个承诺,我希望在每一个循环等待它先完成,然后移动一个。 正如你在下面看到的结果是不是所需/同步。 我应该不使用async.forEachof function test(num, callback) { console.log("inside function: "+num) return new Promise((resolve, reject) => { my.promise(num).then(() => { console.log("done: "+num) resolve(callback); }).catch(e => console.error(e)); }).catch(console.error); } function start_function() { //stuff async.forEachOf(arr, function (itm, i, callback){ console.log(i) test(i, callback).catch(e => console.error(e)); }, function (err) { console.log("ALL DONE") }); } 结果: 0 inside function 0 […]

节点:等待python脚本运行

我有以下代码。 我在哪里上传文件,然后我读取文件和console输出console.log(obj) 。 但是回应是第一位的,Python脚本在幕后运行。 我如何使代码等待python脚本运行,然后继续? router.post(`${basePath}/file`, (req, res) => { //Upload file first PythonShell.run('calculations.py', { scriptPath: '/Path/to/python/script' }, function (err) { console.log(err); let obj = fs.readFileSync('Path/to/file', 'utf8'); console.log(obj); }); return res.status(200).send({ message : 'Success', }); }); 我不能得到console.log(obj); 输出,因为它在响应之后运行。 我怎样才能让它等待python脚本运行并获得console.log(obj)输出。

Node.js中的POST正文和一些asynchronous条件检查

我想从http.ServerRequest获取请求(POST)主体,但是当我的请求函数被调用时,请不要直,而是在一段时间之后(Redis查询)。 我有一个非常简单的例子来说明: var http = require('http'), sys = require('sys'); http.createServer(function (req, res) { sys.puts("Got request"); req.pause(); setTimeout(function() { // In real code I'm accessing Redis here. var body = ""; req.addListener('data', function (chunk) { sys.puts("Got 'data' event"); body += chunk; }); req.addListener('end', function () { sys.puts("Got 'end' event"); res.writeHead(200, {'Content-Type': 'text/plain'}); res.end(body); }); req.resume(); }, […]