相关疑难解决方法(0)

一个接一个地解决承诺(即按顺序)?

请考虑以下以串行/顺序方式读取文件数组的代码.readFiles返回一个promise,只有在按顺序读取所有文件后才会解析.

var readFile = function(file) {
  ... // Returns a promise.
};

var readFiles = function(files) {
  return new Promise((resolve, reject) => 

    var readSequential = function(index) {
      if (index >= files.length) {
        resolve();
      } else {
        readFile(files[index]).then(function() {
          readSequential(index + 1);
        }).catch(reject);
      }
    };

   readSequential(0); // Start!

  });
};
Run Code Online (Sandbox Code Playgroud)

上面的代码可以工作,但我不喜欢按顺序进行递归递归.是否有一种更简单的方法可以重写此代码,以便我不必使用我的奇怪readSequential功能?

最初我试图使用Promise.all,但这导致所有readFile调用同时发生,这不是我想要的:

var readFiles = function(files) {
  return Promise.all(files.map(function(file) {
    return readFile(file);
  }));
};
Run Code Online (Sandbox Code Playgroud)

javascript promise sequential q serial-processing

238
推荐指数
12
解决办法
16万
查看次数

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
查看次数

然后在Promise里面返回Promise链

我想使用返回objectId数组列表的axios来获取API.在我获得列表objectId之后,我想使用promise获取对象的细节

我想到这样的事情

var objectDetail = [];

axios.get('apiendpoint/')
.then((response) => {
  var listOfObjectId = response.data;
  var chain = Promise.resolve()
  for (var objectId of listOfObjectId) {
    chain = chain.then(axios.get(`apiendpoint/${objectId}`)
      .then((response) => {
        objectDetail.push(response.data);
      })
    );
  }
  return chain;
}).then((chain) => {
  console.log(chain);
  return chain;
})
Run Code Online (Sandbox Code Playgroud)

上面的代码返回undefined,promise链对象不传递给then方法调用.我的方法错了还是我错过了什么?谢谢

这是我读过的一些堆栈,可能是相关的:

javascript promise axios

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