无法从’异步’函数获取返回值 – Javascript
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了无法从’异步’函数获取返回值 – Javascript,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2158字,纯文字阅读大概需要4分钟。
内容图文
![无法从’异步’函数获取返回值 – Javascript](/upload/InfoBanner/zyjiaocheng/729/eec00ef846f34b4789b107cc891a5a2a.jpg)
我正在使用javascript中的一些异步函数,但我遇到了一个问题,我已经发布了here,但这对每个人来说都是有点不切实际的经历.现在,我做了一个简单的构造函数,里面有相同的成员函数并返回一个值,但对我来说似乎是同样的问题,我尽我所能,但我不知道是什么问题,如果你运行此代码然后你可以检查我想要的是.这是JSfiddle上的demo link,您可以在控制台上看到结果.
这是我的代码
function Test() {
this.init = async function() {
var count = 0,
page_job_details = null;
async function waitMore() {
console.log("Wait more loaded - " + (count + 1) + "...");
let p = new Promise(function(res, rej) {
setTimeout(async function() {
if (count === 2) {
res({
page_job_details: "khan"
});
} else {
count++;
waitMore();
}
}, 2000);
});
var res = await p;
if (res.page_job_details === '' || res.page_job_details === 'undefined' || res.page_job_details === null) {
console.log("waiting more...");
waitMore();
} else {
console.log("Response is : " + res.page_job_details);
return res;
}
}
var khan;
await waitMore().then(function(r) {
console.log(r);
khan = r;
});
return khan;
}
}
new Test().init().then(function(res) {
console.log(res);
})
When you comment out the conditions within the
setTimeout()
and simplyres({page_job_details:"khan"});
then you’ll get the results in thenew Test().init().then(function(res){ console.log(res); })
. Otherwise not, and that’s the main problem.
解决方法:
其中一个问题是您没有从promise中返回递归调用的结果.
而不是仅递归地调用它
waitMore();
你似乎期望递归调用的结果在管道中返回
res(waitMore());
function Test() {
this.init = async function() {
var count = 0,
page_job_details = null;
async function waitMore() {
console.log("Wait more loaded - " + (count + 1) + "...");
let p = new Promise(function(res, rej) {
setTimeout(async function() {
if (count === 2) {
res({
page_job_details: "khan"
});
} else {
count++;
res(waitMore());
}
}, 2000);
});
var res = await p;
if (res.page_job_details === '' || res.page_job_details === 'undefined' || res.page_job_details === null) {
console.log("waiting more...");
waitMore();
} else {
console.log("Response is : " + res.page_job_details);
return res;
}
}
var khan;
await waitMore().then(function(r) {
console.log(r);
khan = r;
});
return khan;
}
}
new Test().init().then(function(res) {
console.log(res);
})
内容总结
以上是互联网集市为您收集整理的无法从’异步’函数获取返回值 – Javascript全部内容,希望文章能够帮你解决无法从’异步’函数获取返回值 – Javascript所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。