这不是一个重复的问题,这是试图从How do I return the response from an asynchronous call?的详尽解释中获得非常具体的细节,但未涵盖。
我不太了解解决Promises的深刻答案。
我正试图了解如何从返回的Promise中解包我的数据。
console.log(data)
没有回答问题。 “如何获得有效载荷?”。
为什么这是流血的秘密?
我使用节点REPL跟踪我的编码。除了最后一步,我在做所有正确的事情,而且我在这里陷入黑暗。
someasyncFunction()
.then(data => data);
应该返回“未包装的”有效载荷吗?那我为什么得到
$ node gettest.js
Promise { <pending> }
我缺少一个技术性的文章,而我似乎无法得到任何答案。
const https = require('https');
const datastore = {};
async function getInfo (){
https.get('https://www.gnu.org/software/bash/manual/html_node/Command-Line-Editing.html#Command-Line-Editing', (resp) => {
let data='';
resp.on('data', (chunk) => {
data += chunk;
});
resp.on('end', () => {
//console.log(data);
return data;
});
}).on("error", (err) => {
console.log("Error: " + err.message);
});
}
datastore.info = getInfo().then(function (val){
return val;
});
console.log(datastore.info);
答案 0 :(得分:0)
getInfo
是一个Promise,方法then
本身也会返回Promise。
您正在将变量分配给Promise,因此很显然,您会得到它的引用。
正如您链接的问题所述,您应该接受JavaScript的异步特性,并且流程从上到下都是同步的。它只是在getInfo
函数内部是异步的,但这还不够,因为从其中流仍然保持同步。
我建议您只是为了了解自己在做什么,不要使用异步/等待,因为它会让您认为一切都是同步的,而不是同步的。
因此,只能在then
函数内使用val值:
getInfo().then(function (val){
// Your async code here
});
一旦您对这种思维方式充满信心,就可以使用 async / await 重构它,这几乎是语法糖,可以使代码看起来更好:
(async function () {
async function getInfo () {
// your code
}
datastore.info = await getInfo();
console.log(datastore.info);
})();