如何从函数调用中读取Promise解析值

时间:2019-03-03 22:34:50

标签: javascript reactjs

我总共有2个函数,一个函数返回一个新的Promise并解析为一个变量,如下所示:

  function promiseTest(data) {
    const delay = 200;
    return new Promise(resolve => setTimeout(() => resolve(data), delay));
  }

然后是另一个函数,我在其中调用此函数,然后为data变量插入一个JSON对象。

    function getInfo() {
     return promiseTest(require('./allData.json'));
    }

所以我的问题是,如何仅在一个简单的console.log中从getInfo函数读取Promise正在解析的数据?

说:console.log(getInfo().data)(但显然这不起作用,但希望能对我所追求的有所帮助)。

3 个答案:

答案 0 :(得分:1)

使用诺言,您必须使用.then();使用/提取数据;所以

getInfo().then((data) => console.log(data));

您是否有特定的原因需要使用诺言?您的示例似乎适合仅使用setTimeout函数

答案 1 :(得分:1)

promise返回的值作为第一个参数传递到.then函数中。

请参阅:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then

在您的情况下,可能是: getInfo()。then(data => console.log(data));

希望这会有所帮助。

答案 2 :(得分:1)

有几种方法可以做到这一点。

异步/等待

JavaScript在几年前引入了asyncawait关键字。这是一种简化异步编程的特殊语法。您可以使函数async,并在调用它们时使用await。它基本上包裹了整个. then()混乱。

async function promiseTest(data) {
    const delay = 200;
    return new Promise(resolve => setTimeout(() => resolve(data), delay));
}


async function getInfo() {
    return await promiseTest(require('./allData.json'));
}

然后,您可以通过等待getInfo()来获得结果:

console.log(await getInfo());

以下一些阅读应该对您有帮助:

https://javascript.info/async-await https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Instructions/async_function

.then()

您还可以使用以下方法继续使用旧方法:

function promiseTest(data) {
    const delay = 200;
    return new Promise(resolve => setTimeout(() => resolve(data), delay));
}


function getInfo() {
    return promiseTest(require('./allData.json'));
}

getInfo().then(data => console.log(data));

传递回叫

您可以将回调传递给getInfo方法。

function promiseTest(data) {
    const delay = 200;
    return new Promise(resolve => setTimeout(() => resolve(data), delay));
}


function getInfo(callback) {
    promiseTest(require('./allData.json')).then(data => callback(data));
}

getInfo(data => console.log(data));