相关疑难解决方法(0)

在哪里破坏 knex 连接

我正在使用knexpg

我有一个类似于以下的项目。

数据库客户端.js

const dbClient = require('knex')({
  client: 'pg',
  connection: {
    host: '127.0.0.1',
    user: 'user',
    password: 'password',
    database: 'staging',
    port: '5431'
  }
})

module.exports = dbClient
Run Code Online (Sandbox Code Playgroud)

库.js

const knex = require('./dbClient.js')

async function doThis(email) {
  const last = await knex('users').where({email}).first('last_name').then(res => res.last_name)
  // knex.destroy()
  return last
}

async function doThat(email) {
  const first = await knex('users').where({email}).first('first_name').then(res => res.first_name)
  // knex.destroy()
  return first
}

module.exports = {
  doThat,
  doThis
}
Run Code Online (Sandbox Code Playgroud)

测试01.js

const {doThis, doThat} = require('./libs.js');

(async …
Run Code Online (Sandbox Code Playgroud)

node.js knex.js

10
推荐指数
3
解决办法
2万
查看次数

Promise.all消耗我所有的RAM

我有一个我正在使用的API的速率限制器,它允许每秒20个请求.所有请求都是基于承诺的,一旦有响应,承诺将通过API数据解决.

问题:

我设置了一个promiseArray,它包含所有等待响应的58k承诺.所以内存越来越慢,直到我的内存耗尽为止.在我的具体情况下,我不需要将已解析的数据传递给我then(),数据占用了我所有的RAM.

代码:

  }).then(() => {
    // 2. Crawl for all clanprofiles from these leaderboards
    const promiseArray = []
    for (let i = 0; i < clanTags.length; i++) {
      // Resolved data from getClanProfile() is eating up all my RAM
      const p = backgroundScheduler.getClanProfile(clanTags[i], true)
      promiseArray.push(p)
    }
    return Promise.all(promiseArray)
  }).then(() => {
Run Code Online (Sandbox Code Playgroud)

那么有没有办法等待promiseArray被解析而不需要解析数据?

javascript node.js bluebird

6
推荐指数
1
解决办法
1032
查看次数

向一个每分钟只能处理 20 个请求的 API 发出多个请求

我有一个返回承诺的方法,该方法在内部调用一个 API,该 API 每分钟只能有 20 个请求。问题是我有一大堆对象(大约 300 个),我想为每个对象调用 API。

目前我有以下代码:

    const bigArray = [.....];

    Promise.all(bigArray.map(apiFetch)).then((data) => {
      ...
    });
Run Code Online (Sandbox Code Playgroud)

但它不处理时序约束。我希望我可以使用 _.chunk 和 _.debounce from 之类的东西,lodash但我无法理解它。有人可以帮我吗?

javascript node.js

1
推荐指数
1
解决办法
1385
查看次数

选择适当的异步方法来进行最大请求数/秒的批处理

我需要对某些外部 API 执行循环调用,但有一定的延迟,以防止“超出用户速率限制”限制。

Google 地图地理编码 API 对“请求/秒”敏感,允许 10 个请求/秒。我应该对数百个联系人进行地理编码,而这样的延迟是必需的。因此,我需要 10 个异步地理编码函数,每个函数的后延迟为 1 秒。因此,我收集数组中的所有联系人,然后以异步方式循环遍历数组。

一般来说,我需要有 N 个并发线程,每个线程结束时有 D 毫秒的延迟。整个循环迭代用户实体数组。像往常一样,每个线程处理单个实体。

我想有这样的代码:

const N = 10;   # threads count
const D = 1000; # delay after each execution

var processUser = function(user, callback){ 
  someBusinessLogicProc(user, function(err) {
    setTimeout(function() {
      return callback(err);
    }, D);
  });      
 }

 var async = require('async') ;
 var people = new Array(900);

 async.batchMethod(people, processUser, N, finalCallback);
Run Code Online (Sandbox Code Playgroud)

在这个伪代码中batchMethod是我要求的方法。

node.js node-async async.js

1
推荐指数
1
解决办法
4375
查看次数

标签 统计

node.js ×4

javascript ×2

async.js ×1

bluebird ×1

knex.js ×1

node-async ×1