Подчеркнув еще один момент в комментариях, чтобы еще больше сократить ваш пример, чтобы вы могли просто опубликовать код в вопросе и просто сохранить ссылку для воспроизведения, вот уже предварительный ответ на ваш вопрос:
Первый:
Порядок должен быть сохранен, поэтому у меня есть система очередей. Разве Queue () в AsyncWorker позаботится об этом?
Нет, NAPI
не документирует какую-либо гарантию заказа, и я был бы удивлен, если бы это было так, поскольку эта "очередь" только в Средство откладывания работы, которая будет взята одним из множества рабочих потоков.
А также, если вы не используете NAPI правильно, вы должны прочитать документацию AsyncWorker и весь Shebang Lifetime, например, вы написали в https://github.com/t348575/blockchain-api-testing/blob/master/cpp/asyncFunctions.h#L11
class AsyncFunctions : public PromiseWorker {
public:
AsyncFunctions(Napi::Promise::Deferred const &d, Napi::Object& resource) : PromiseWorker(d), resource(resource) {};
virtual ~AsyncFunctions() {};
void Execute() {
std::this_thread::sleep_for(std::chrono::seconds(3));
std::string input = resource.Get('data').As<Napi::String>();
this->result = "result is: " + input;
}
этот std::string input = resource.Get('data').As<Napi::String>
строго запрещен и ведет к неопределенному поведению, поскольку NAPI четко документирует, что вы не должны вызывать функции NAPI в функции execute
.