Асинхронное ожидание непредвиденной ошибки на игровой площадке

У меня есть этот код на игровой площадке для iOS, XCode v15.3:

import Foundation
import PlaygroundSupport

func fetchWeatherHistory() async -> [Double] {
    (1...100).map { _ in Double.random(in: -10...30) }
}

func calculateAverageTemperature(for records: [Double]) async -> Double {
    let total = records.reduce(0, +)
    let average = total / Double(records.count)
    return average
}

func upload(result: Double) async -> String {
    "OKet"
}

func processWeather() async throws {
    var records = await fetchWeatherHistory()
    var average = await calculateAverageTemperature(for: records)
    var response = await upload(result: average)
    print("Server response: \(response)")
    return
}

do {
    try await processWeather()
} catch let error {
    print(error.localizedDescription)
}

Я получаю этот вывод (вместе с ошибкой:

Server response: OKet
Playground execution failed:

error: execution stopped with unexpected state.
error: Execution was interrupted.
The process has been left at the point where it was interrupted, use "thread return -x" to return to the state before expression evaluation.

в чем ошибка, ты знаешь? И как это исправить?

Почему игровая площадка будет работать достаточно долго, чтобы ваш код завершился? И тебе действительно разрешено вот так говорить await посреди ниоткуда? Я ожидаю увидеть задачу на вершине асинхронной цепочки. — Действительно, на вашем месте я бы вообще не пытался использовать async/await на игровой площадке.

matt 30.05.2024 21:51
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
73
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно сообщить Playgrounds, что вы выполняете асинхронную работу, установив NeedsIndefiniteExecution на true и вызвав FinishExecution, когда вы закончите.


PlaygroundPage.current.needsIndefiniteExecution = true
do {
    try await processWeather()
} catch let error {
    print(error.localizedDescription)
}
PlaygroundPage.current.finishExecution()

это сработало прекрасно.

Vladimir Despotovic 31.05.2024 15:34

Другие вопросы по теме