gpt4 book ai didi

firebase - Cloud Functions for Firebase 中的套接字挂断错误

转载 作者:行者123 更新时间:2023-12-04 13:02:56 24 4
gpt4 key购买 nike

我有一个由 Pub/Sub 事件触发的云函数。它使用 request-promise从我用于数据的 API 发出多个 GET 请求。

它在 Cloud Functions Emulator 本地运行时有效,但在生产中我不断收到此错误:

{ RequestError: Error: socket hang up
at new RequestError (/user_code/node_modules/request-promise/node_modules/request-promise-core/lib/errors.js:14:15)
at Request.plumbing.callback (/user_code/node_modules/request-promise/node_modules/request-promise-core/lib/plumbing.js:87:29)
at Request.RP$callback [as _callback] (/user_code/node_modules/request-promise/node_modules/request-promise-core/lib/plumbing.js:46:31)
at self.callback (/user_code/node_modules/request/request.js:185:22)
at emitOne (events.js:96:13)
at Request.emit (events.js:188:7)
at Request.onRequestError (/user_code/node_modules/request/request.js:877:8)
at emitOne (events.js:96:13)
at ClientRequest.emit (events.js:188:7)
at TLSSocket.socketOnEnd (_http_client.js:346:9)
at emitNone (events.js:91:20)
at TLSSocket.emit (events.js:185:7)
at endReadableNT (_stream_readable.js:974:12)
at _combinedTickCallback (internal/process/next_tick.js:80:11)
at process._tickDomainCallback (internal/process/next_tick.js:128:9)
name: 'RequestError',
message: 'Error: socket hang up',
cause:
{ Error: socket hang up
at createHangUpError (_http_client.js:254:15)
at TLSSocket.socketOnEnd (_http_client.js:346:23)
at emitNone (events.js:91:20)
at TLSSocket.emit (events.js:185:7)
at endReadableNT (_stream_readable.js:974:12)
at _combinedTickCallback (internal/process/next_tick.js:80:11)
at process._tickDomainCallback (internal/process/next_tick.js:128:9) code: 'ECONNRESET' },
error:
{ Error: socket hang up
at createHangUpError (_http_client.js:254:15)
at TLSSocket.socketOnEnd (_http_client.js:346:23)
at emitNone (events.js:91:20)
at TLSSocket.emit (events.js:185:7)
at endReadableNT (_stream_readable.js:974:12)
at _combinedTickCallback (internal/process/next_tick.js:80:11)
at process._tickDomainCallback (internal/process/next_tick.js:128:9) code: 'ECONNRESET' },
options:
{ method: 'GET',
uri: 'https://api.coinmarketcap.com/v2/ticker/?convert=BTC&start=0',
json: true,
callback: [Function: RP$callback],
transform: undefined,
simple: true,
resolveWithFullResponse: false,
transform2xxOnly: false },
response: undefined }

知道为什么我的 Cloud Function 运行时会出现此套接字挂断错误吗?

编辑:这是我的云函数代码的样子:
const functions = require('firebase-functions');
// Import Admin SDK
var admin = require("firebase-admin");
var reqprom = require('request-promise');

admin.initializeApp(functions.config().firebase);

exports.minutely_tick =
functions.pubsub.topic('minutely-tick').onPublish((event) => {
console.log('This job runs every 5 minutes!');
getAllData()
.then((dataArray) => {
const ref = admin.database().ref(`myData/`);
ref.set(dataArray);
return console.log('dataArray length:', dataArray.length);
})
.catch((error) => {
return console.log('Caught error: ', error);
});
});

function getAllData() {
return new Promise((resolve, reject) => {

var promises = [];
var startInt = 0;
for (i = 0; i < 1000; i++) {
const options = {
method: GET,
uri: myUrlString,
json: true
}
promises.push(reqprom(options));
startInt += 100;
}

Promise.all(promises)
.then((dict) => {
var array = valuesFromDict(dict);
return resolve(array);
})
.catch((error) => {
return reject(error);
});
});

}

function valuesFromDict(dict) {
var values = Object.keys(dict).map((key) => {
return dict[key];
});
return values;
}

总之,该函数在循环中进行多个 API 调用。通过 promise ,我等待所有这些完成。然后将该数据格式化为我设置为 Firebase 数据库引用的数组。

最佳答案

您不会从 promise 链中返回最终 promise 。 Cloud Functions 要求您返回一个 promise ,该 promise 仅在您的函数中完成所有异步工作时才解决。

return getAllData().then(...).catch(...)

关于firebase - Cloud Functions for Firebase 中的套接字挂断错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50630209/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com