Облачная функция Firebase с развертыванием N-API не удалась - PullRequest
0 голосов
/ 19 февраля 2020

Попытка выяснить, возможно ли запустить облачные функции Firebase с собственным кодом (с использованием N-API). У меня есть простой пример "Hello World", который отлично работает под эмулятором, однако, когда я пытаюсь развернуть его, я получаю сообщение об ошибке INVALID_ARGUMENT:

  status: {
   code:  3     
   message:  "INVALID_ARGUMENT"     
  }

Это не очень информативно ... Просто интересно, если кто-то может пролить некоторый свет на ситуацию. Спасибо!

вот функция:

'use strict';

const functions = require('firebase-functions');

exports.helloWorld = functions.https.onRequest(async(request, response) => {

console.time('Program runtime');

const testAddon = require('bindings')('testaddon.node')
const {promisify} = require('util');

module.exports = testAddon;
const asyncCommand = testAddon.hello();

try {
  const result = await asyncCommand;
  console.log('CONTENT:', result);
  response.send(result);
}
catch (err) {
    console.log('ERROR:', err);
    response.send('ERROR:', err);
}

console.timeEnd('Program runtime');
});

и соответствующий источник C ++:

#include <napi.h>
namespace functionexample {
  std::string hello();
  Napi::String HelloWrapped(const Napi::CallbackInfo& info);
  Napi::Object Init(Napi::Env env, Napi::Object exports);
}
#include "functionexample.h"
std::string functionexample::hello(){
  return "Hello World";
}
Napi::String functionexample::HelloWrapped(const Napi::CallbackInfo& info)
{
  Napi::Env env = info.Env();
  Napi::String returnValue = Napi::String::New(env, functionexample::hello());

  return returnValue;
}
Napi::Object functionexample::Init(Napi::Env env, Napi::Object exports)
{
  exports.Set(
"hello", Napi::Function::New(env, functionexample::HelloWrapped)
  );

  return exports;
}

Ответы [ 3 ]

0 голосов
/ 21 февраля 2020

Похоже, проблема была с версией движка узла. Я переключился на узел 10 вместо узла 8, и моя тестовая функция развернулась правильно и работает как положено.

0 голосов
/ 09 марта 2020

N-API был помечен как стабильный API, начиная с Node.js v8.6.0, поэтому, если вы используете более раннюю версию Node.js, вы можете столкнуться с проблемами, описанными здесь. Это причина того, что переключение на Node.js версию 10 все работает хорошо.

0 голосов
/ 20 февраля 2020

Я думаю, проблема в том, что testaddon.hello () не возвращает обещание, поэтому ожидание его - проблема. если addon.hello () была асинхронной c javascript функцией, тогда javascript гарантировал бы, что она вернула обещание, но это функция C ++.

я раньше не использовал обещания из аддона но это может помочь:

https://github.com/nodejs/node-addon-api/blob/master/doc/promises.md

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...