我总共有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)
(但显然这不起作用,但希望能对我所追求的有所帮助)。
答案 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在几年前引入了async
和await
关键字。这是一种简化异步编程的特殊语法。您可以使函数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
您还可以使用以下方法继续使用旧方法:
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));