Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

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

java - ReactNative NativeModules using Interface callback not resolving promise

Im trying to use a native Android library that implements Interface callbacks. I have implemented the bridge, and by running this code:

 for (const i in payloads) {
        console.log("i", i)

        const payload = payloads[i].payload
        const result = await sendPayload(payload)
        
        console.log("result", result)
    }

Results in:

i 0
result 123456789
i 1

But the promise in the second iteration (1) is not resolving.

Native use this async code snippet:

_interface.sendData(data, new com.example.app.SequenceCallback() {
        @Override
        public void result(String result) {
            Log.d("app", "returning result: " + result);
            promise.resolve(result);
        }
    });

And the native code prints both of the Log.d -messages so it runs correctly calling promise.resolve(result), my conclusion is that the promise is lost somehow?

(A side note is that I have tried just creating a dumb @ReactMethod that instantly resolves the promise and used this in the loop. And that worked fine.)

Thank you in advance.


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

1 Reply

0 votes
by (71.8m points)

I tried using React's Promise and Callback, both had the same effect. I ended up providing the library(my own, I could change the code) with the Promise object like so:

_interface.sendData(data, promise, new com.example.app.SequenceCallback() {
    @Override
    public void result(String result, Promise rPromise) {
        Log.d("app", "returning result: " + result);
        rPromise.resolve(result);
    }
});

Dont know why my first code didn't work, but this did.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...