Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix issue with setImmediate not defined on Web #4276

Merged
merged 4 commits into from
Mar 28, 2023
Merged

Conversation

kmagiera
Copy link
Member

Summary

This PR removes uses of setImmediate which is not a standard API across web browsers. Instead, we use queueMicrotask API which is available both in the browser world, in React Native and in Node.

Fixes #4140

Test plan

Run example app, test WebExample, test repro app from #4140 with import setImmediate removed

Copy link
Member

@tomekzaw tomekzaw left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM 😎

Copy link
Member

@piaskowyk piaskowyk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🐎

@kmagiera kmagiera added this pull request to the merge queue Mar 28, 2023
Merged via the queue into main with commit ddf3538 Mar 28, 2023
@kmagiera kmagiera deleted the dont-use-set-immediate branch March 28, 2023 08:07
fluiddot pushed a commit to wordpress-mobile/react-native-reanimated that referenced this pull request Jun 5, 2023
## Summary

This PR removes uses of setImmediate which is not a standard API across
web browsers. Instead, we use queueMicrotask API which is available both
in the browser world, in React Native and in Node.

Fixes software-mansion#4140

## Test plan

Run example app, test WebExample, test repro app from software-mansion#4140 with `import
setImmediate` removed
github-merge-queue bot pushed a commit that referenced this pull request Jun 22, 2023
<!-- Thanks for submitting a pull request! We appreciate you spending
the time to work on these changes. Please follow the template so that
the reviewers can easily understand what the code changes affect. -->

## Summary

This PR is amending some changes from #4276 where we exchanged
`setImmediates` for `queueMicrotask` for `_scheduneOnJS`.

`queueMicrotask` does not take any arguments, only a callback and the
change of behaviour stemming from this was not considered in `runOnJS`
implementation. This PR fixes this and also makes `runOnJS` actually
call `_scheduleOnJS` on web, making it asynchronous and consistent with
general behavior of `runOnJS` - before it was unreachable code on web
since it would simply return the provided function that was called
synchronously.

## Test plan

Run WebExample and see that now `runOnJS` is working properly. I used
the following snippet:

```TypeScript
function foo() {
    console.log('hello');
  }

  function foz(str: string) {
    console.log(str);
  }

  runOnJS(foo)();
  runOnJS(foz)('bye');

  function bar() {
    console.log('hello again');
  }

  function baz(str: string) {
    console.log(str);
  }

  runOnUI(() => {
    runOnJS(bar)();
    runOnJS(baz)('bye again');
  })();
```

Before:

<img width="738" alt="Screenshot 2023-06-14 at 13 45 59"
src="https://github.com/software-mansion/react-native-reanimated/assets/40713406/e57210fb-078f-4c58-badc-9476683695b6">

After:
<img width="735" alt="Screenshot 2023-06-14 at 13 45 11"
src="https://github.com/software-mansion/react-native-reanimated/assets/40713406/23eb27df-f2db-4e18-ad68-bcae37282e0c">
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[v3][Web] setImmediate is not defined
3 participants