Skip to content

FFI Requires setTimeout #176

Description

@BebeSparkelSparkel

When using FFI for Aff I need to use setTimeout before calling onSuccess or else the page hangs as if onSuccess was never called. Feels like there is some listener setup in the wrong order or onSuccess is defined after the return.

Failing example without timeout.

exports.failing = s => (onError, onSuccess) => {
  onSuccess(s)
  return (cancelError, cancelerError, cancelerSuccess) => {cancelerSuccess()}
}

Working example with timeout.

exports.working = s => (onError, onSuccess) => {
  setTimeout(() => onSuccess(s), 100)
  return (cancelError, cancelerError, cancelerSuccess) => {cancelerSuccess()}
}

Activity

  1. natefaubion commented on Aug 2, 2019

    @natefaubion
    Collaborator

    I cannot reproduce this with a modified version of the EffectFn test that always resolves immediately. I suspect that you have some sort of race condition in your code. Could you post a self contained example?

  2. BebeSparkelSparkel commented on Aug 3, 2019

    @BebeSparkelSparkel
    Author
  3. natefaubion commented on Aug 3, 2019

    @natefaubion
    Collaborator

    This is because you are typing it as Aff. Aff's representation is opaque. You need to type it as EffectFnAff and use the Compat module.

    -- | foreign import _myAff :: EffectFnAff String
    -- |
    -- | myAff :: Aff String
    -- | myAff = fromEffectFnAff _myAff

  4. BebeSparkelSparkel commented on Aug 3, 2019

    @BebeSparkelSparkel
    Author

    Sorry about that. Just fixed it and am still having the same problem

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions