Как я могу получить доступ к значению, возвращенному обещанием? - PullRequest
0 голосов
/ 11 февраля 2020

Я новичок в stackoverflow и уже несколько дней сталкиваюсь с проблемой. У меня есть следующий фрагмент кода:

let comptot = function (value, data) {
     return fetch(API_TOT)
    .then(response => response.json())
    .then((data) => {
        let x = data[0].cantidad;
        console.log(x);
        return x;
    })
    .catch(error => {
        console.log("el error es el siguiente", error)
    })}

Проблема в том, что я не могу получить доступ к возвращаемому им значению. Он записывает значение (230) в консоль, но я хочу отобразить это значение в таблице (я использую Tabulator), и он возвращает только:

Promise {<pending>}
__proto__: Promise
[[PromiseStatus]]: "resolved"
[[PromiseValue]]: "230"

Я прочитал кучу из довольно похожих вопросов, но я не могу понять, как решить это. Я также вроде понимаю, как работают обещания, но, очевидно, я не все понял, иначе у меня не возникло бы этой проблемы (я также прочитал ряд статей об обещаниях и посмотрел десятки видео на YouTube об обещаниях и до сих пор ничего). Я также попытался использовать Asyn c Await со следующим кодом, и у меня возникла точно такая же проблема:

let comtot = async function (value, data) {
    let response = await fetch(API_TOT);
    let com = await response.json();

    console.log(com[0].cantidad);
    return com[0].cantidad;
}

Пожалуйста, помогите мне решить эту проблему, я действительно оценил бы это!

Ответы [ 2 ]

0 голосов
/ 12 марта 2020

* Это тот же ответ на другой вопрос, который я написал. Я не знал, что не так с моим кодом, поэтому я отправил два разных вопроса для двух вещей, которые я думал, что они не связаны, но я ошибался.

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

function delayIt() {table.setData(API_URL)} setTimeout(delayIt, 1000)

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

0 голосов
/ 11 февраля 2020

с этим фрагментом,

let comptot = function (value, data) {
     return fetch(API_TOT)
    .then(response => response.json())
    .then((data) => {
        let x = data[0].cantidad;
        console.log(x);
        return x;
    })
    .catch(error => {
        console.log("el error es el siguiente", error)
    })
}

comptot ссылается на объект Promise, как вы упомянули, чтобы извлечь его значение, используйте .then() API,

comptot.then(res => {
  console.log("Resolved value", res);
}).catch(err => {
  console.log("Rejected value: ", err)
})

read больше о обещаниях и его .then () API

...