Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
224 views
in Technique[技术] by (71.8m points)

c++ - Is there a way to identify Persistent<Function> uniqueness?

I am storing js callbacks in vector:

std::vector<std::unique_ptr<Persistent<Function>>> callbacks;

Everything is working fine. The problem is that I do not want to store duplicated callbacks because I do not want to notify the same callback twice. I have to compare them somehow. Here is my full function but that does not work:

void ProcessCallback(const FunctionCallbackInfo<Value>& args)
{
    std::string returnInfo;

    Isolate* isolate = args.GetIsolate();
    Local<Function> notifyFunction = Local<Function>::Cast(args[0]);
    
    auto predicate = [&](const std::unique_ptr<Persistent<Function>>& c)
    {
        return c->Get(isolate)->StrictEquals(notifyFunction);
    };

    auto it = std::find_if(callbacks.begin(), callbacks.end(), predicate);
    if (it == callbacks.end())
    {
        returnInfo = "Did not find callback. Adding..." + std::to_string(callbacks.size());

        auto persistentCallback = std::make_unique<Persistent<Function>>(isolate, notifyFunction);
        callbacks.emplace_back(std::move(persistentCallback));
    }
    else
    {
        returnInfo = "Callback already exist in a list.
";
    }
    
    args.GetReturnValue().Set(String::NewFromUtf8(isolate, returnInfo.c_str()).ToLocalChecked());
}

In js:

function callback(msg) {
    console.log(msg);
}

let addon = require('./build/Release/addon');

console.log(addon.on(callback));
console.log(addon.on(callback));

Is there something that I can rely on to uniquely identify function that is passed from js? Thanks.

question from:https://stackoverflow.com/questions/65559555/is-there-a-way-to-identify-persistentfunction-uniqueness

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)
Waitting for answers

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...