вернуть результат из наблюдаемого в JS - PullRequest
0 голосов
/ 25 февраля 2020

У меня есть функция, которая имеет наблюдаемый объект, и мне нужно вернуть значение выборки, которую я использую в этой функции. Но я не знаю, почему я не могу вернуть результат, когда я отображаю результат, он полностью в порядке, но когда я пытаюсь его вернуть, он пуст.

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

function getRandomQuote() {
    const obs$ = Observable.create(async(observer) => {
        const result = await fetch(RANDOM_QUOTE_API_URL)
            .then(Response => Response.json())
            .then(data => data.content)

        observer.next(result)
        console.log(result)
    })

    return obs$.subscribe(x => { return x })
}

Я пытался использовать return только внутри части подписки, но она не работает, и в одном из подобных случаев они пытались вернуть внешнюю часть, которую я пытался, и до сих пор не работает

Я новичок в Observable и JavaScrip. Мне просто нужно вернуть это значение и использовать его в другой функции. спасибо

1 Ответ

1 голос
/ 25 февраля 2020

Вы должны вернуть Observable кроме Subscription

function getRandomQuote() {
    return Observable.create(async(observer) => {
        const result = await fetch(RANDOM_QUOTE_API_URL)
            .then(Response => Response.json())
            .then(data => data.content)
        observer.next(result)
    })
}
//usage 
    getRandomQuote().subscribe(console.log)

Или есть оператор defer() и from(), который поможет вам преобразовать обещание в наблюдаемое

getRandomQuote=()=>defer(()=>from(fetch(RANDOM_QUOTE_API_URL)
            .then(Response => Response.json())
            .then(data => data.content))

//usage 
getRandomQuote().subscribe(console.log)
...