小编Hen*_*ies的帖子

Nodejs,Cloud Firestore上传任务 - 验证错误:错误:套接字挂起

我正在编写一个运行API调用的函数,并通过偏移按顺序从一个巨大的数据库中请求JSON.解析JSON响应,然后将其中的后续数据上载到我们的Cloud Firestore服务器.

Nodejs(节点6.11.3)和最新的Firebase Admin SDK

信息按预期进行解析,并完美地打印到控制台.但是,当数据尝试上传到我们的Firestore数据库时,控制台会发送垃圾邮件并显示错误消息:

验证错误:错误:套接字挂起

(node:846)UnhandledPromiseRejectionWarning:未处理的promise promise(拒绝ID:-Number-):错误:从插件获取元数据失败,错误:socket挂断

偶尔:

验证错误:错误:读取ECONNRESET

forEach函数从下载的JSON中收集项目,并在上载到Firestore数据库之前处理数据.每个JSON最多有1000项数据(1000个文档值)通过forEach函数.我知道如果函数在上传集完成之前重复,这可能是个问题吗?

我是一个编码新手,并且明白这个功能的控制流程并不是最好的.但是,我找不到有关控制台打印的错误的任何信息.我可以找到有关套接字挂起的大量信息,但在Auth错误部分没有.

我使用生成的服务帐户JSON作为访问我们的数据库的凭据,该数据库使用firebase-adminsdk帐户.我们的数据库读/写规则目前是开放的,允许任何访问(因为我们正在开发没有真正的用户).

这是我的功能:

Firebase初始化和偏移归零

 const admin = require('firebase-admin');
    var serviceAccount = require("JSON");
    admin.initializeApp({
    credential: admin.credential.cert(serviceAccount),
    databaseURL: "URL"
    });
    var db = admin.firestore();
    var offset = 0;
    var failed = false;
Run Code Online (Sandbox Code Playgroud)

运行该功能并设置HTTP标头

var runFunction = function runFunction() {
    var https = require('https');
    var options = {
        host: 'website.com',
        path: (path including an offset and 1000 row specifier),
        method: 'GET',
        json: true,
        headers: {
            'content-type': 'application/json',
            'Authorization': 'Basic ' + …
Run Code Online (Sandbox Code Playgroud)

json node.js firebase google-cloud-firestore

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

将解析后的JSON数据上传到Firebase循环函数时,内存和CPU使用率极高

这是我在这里的第一个问题,所以对我来说很容易!

我是一名新手编码器,我正在尝试循环使用JSON,解析数据并将信息备份到我的Firebase服务器 - 使用Alamofire请求JSON信息.

Swift 4,Alamofire 4.5.1,Firebase 4.2.0

该过程有效 - 但并非没有无限增加设备内存使用和高达200%的CPU使用率.通过注释掉行,我在我的数据提取功能中将内存和CPU使用率单独下放到Firebase上传setValue行 - 它遍历未知长度的JSON数据库(通过一次最多拉1000行数据 - 因此增加偏移值).我从中提取信息的数据库非常庞大,随着内存使用量的增加,该函数的速度非常慢.

该函数检测是否找到了空JSON(结果的结尾),然后结束或解析JSON,将信息上传到Firebase,将偏移值增加1000行,然后使用新的偏移值重复自身.

var offset: Int! = 0
var finished: Bool! = false

func pullCities() {
  print("step 1")
  let call = GET_CITIES + "&offset=\(self.offset!)&rows=1000"
  let cityURL = URL(string: call)!
  Alamofire.request(cityURL).authenticate(user: USERNAME, password: PASSWORD).responseJSON { response in
    let result = response.result
    print("step 2")
    if let dict = result.value as? [Dictionary<String, Any>] {
        print("step 3")
        if dict.count == 0 {
            self.finished = true
            print("CITIES COMPLETE")
        } else {
            print("step …
Run Code Online (Sandbox Code Playgroud)

ios firebase swift alamofire

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

在 node.js 中一次以 50 个项目为单位迭代数组

我是 node.js 的新手,目前正在尝试编写数组迭代代码。我有一个包含 1,000 个项目的数组 - 由于服务器负载问题,我想一次遍历 50 个项目的块。

我目前使用如下所示的 forEach 循环(我希望将其转换为上述块迭代)

   //result is the array of 1000 items

   result.forEach(function (item) {
     //Do some data parsing
     //And upload data to server
    });
Run Code Online (Sandbox Code Playgroud)

任何帮助将非常感激!

更新(响应回复)

async function uploadData(dataArray) {
    try {
        const chunks = chunkArray(dataArray, 50);
        for (const chunk of chunks) {
            await uploadDataChunk(chunk);
        }
    } catch (error) {
        console.log(error)
        // Catch en error here
    }
}

function uploadDataChunk(chunk) {
    return Promise.all(
        chunk.map((item) => {
            return new Promise((resolve, reject) => { …
Run Code Online (Sandbox Code Playgroud)

javascript arrays node.js promise

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