Как извлечь и сохранить [[PromiseValue]] в локальную переменную? - PullRequest
0 голосов
/ 14 ноября 2018

Есть две функции; function getThumbnail(url) {} и function getVimeoData() {}.

Я использую fetch() для обработки вызовов HTTP для получения url миниатюры видео в Vimeo . oEmbed используется для извлечения JSON-данных видео, которое содержит thumbnail_url.

Функции выполняются следующим образом:

async function getVimeoThumb(videoUrl) {
    return await fetch(videoUrl)
        .then(response => {
            if (response.status !== 200) {
                console.log('Error occurred while fetching thumbnail.');
                return null;
            }

            return response.json();
        })
        .then(data => {return data['thumbnail_url']})
        .catch(err => console.log(err.reason));
}

Вышеуказанная функция возвращает Promise со значением [[PromiseValue]]: "{{thumbnail_url}}". Возвращаемое значение Promise выбирается в следующей функции:

function getThumbnailUrl() {
    let newUrl;

    ...

    getVimeoThumb(url).then(result => {console.log(result)})

    ...
}

Приведенная выше функция возвращает консольный журнал как {{thumbnail_url}}.

Следовательно, мой вопрос заключается в том, есть ли обходной путь для сохранения извлеченного значения {{thumbnail_url}} в моей локальной переменной newUrl?

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

@ Нитич прав. Но если вы хотите использовать newUrl, вы можете попробовать это. newUrl будет в глобальной области видимости.

    let newUrl;
    function getThumbnailUrl() {

    ...

    getVimeoThumb(url).then(result => { newUrl = result; console.log(result) })

    ...
    }

Или просто сделай

    ...

    getVimeoThumb(url).then(result => { newUrl = result; return newUrl; })

    ...
    }
    let newUrl = getThumbnailUrl(videoUrl);

Надеюсь, это поможет.

0 голосов
/ 14 ноября 2018

У вас уже есть локальная переменная (newUrl), поэтому, где вы регистрируете результат, вы можете сохранить только

function getThumbnailUrl() {
    let newUrl;

    ...

    getVimeoThumb(url).then(result => { newUrl = result; console.log(result) })

    ...
}
...