javaandroidreact-nativereact-native-native-module

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.


Solution

  • 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.