Когда я пишу F # для Fable, когда я должен использовать async и когда я должен использовать обещание? - PullRequest
0 голосов
/ 02 января 2019

F # с Fable предоставляет два вычислительных выражения для работы с кодом на основе обратного вызова: async и promise.

async - это более сомнительный F #, но мне не ясно, насколько хорошо он будет работать в браузере. В идеале я мог бы использовать async везде, так как это дает мне большее повторное использование кода на клиенте и сервере.

  • Каковы ограничения async в браузере?
  • Каковы ограничения promise на сервере (например, ядро ​​dotnet)
  • Могу ли я легко переключаться между двумя? (например, чтобы обернуть fetch API)
  • Что такое идоматика для Fable?

Примечание: мне не нужно взаимодействовать с каким-либо JavaScript, кроме API браузера.

1 Ответ

0 голосов
/ 31 января 2019

Каковы ограничения асинхронности в браузере?

При использовании async в браузере вы не можете использовать Async.RunSynchronously. Я думаю, что это ограничение, потому что JavaScript является однопоточным.

Каковы ограничения обещаний на сервере (например, ядро ​​dotnet)

Вы не можете использовать promise на сервере, потому что .Net или .NetCore не знают этого вычисления. При работе с асинхронным кодом на сервере .Net или .NetCore необходимо использовать async.

Если на сервере используется Node.js то же ограничение, что и в браузере.

Могу ли я легко переключаться между двумя? (например, чтобы обернуть API выборки)

API выборки уже был упакован с использованием обещания в Fable.Fetch и Fable.Promise.

    promise {
        let! res = fetch "http://fable.io" []
        let! txt = res.text()
        // Access your resource here
        Browser.console.log txt
    }

Также, открыв Fable.Core, вы можете получить доступ к Async.AwaitPromise и Async.StartAsPromise.

Что идиоматично для Fable?

Лично я использую promise только потому, что сейчас это встроенная функция JavaScript, и в целом библиотека JavaScript ожидает, что вы будете работать с promise, даже если вы можете перемещаться между promise и async.

...