【发布时间】:2017-09-27 02:47:08
【问题描述】:
这是我第一次尝试使用异步 javascript。我已经尝试连接我能找到的所有承诺的化身,但未能成功编写它们以使我的字符串返回(即 $.Deferred、async/await、Promise、回调、依赖 .done)。 async:false 作为 ajax 变量有效,但我试图避免满足于我所理解的不好的做法。我很想使用 async/await,因为它非常简洁,但在这一点上,我准备好了任何可行的方法。我怀疑我试图以不正确的方式使用 $.ajax 返回。
非常感谢字符串wholename(一个随机的名字和姓氏)的工作返回,我自己的教育的几个版本的例子更加感谢!
function Actor(gender, name) {
if (gender == "" || gender == undefined) {this.gender = "female";} else this.gender = gender;
if (name == "" || name == undefined) {this.name = makeName(this.gender);} else this.name = name;
}
function getPromiseName(sex) {
return promise = $.ajax({
type: "GET",
url: "TMxml.xml",
dataType: "xml"//,
//async: false //this works for returns, but is apparently bad practice
});
}
function makeName(sex) {
var fnames = [];
var lnames = [];
var thexml = getPromiseName(sex);
thexml.done(function(xml) {
if (sex == "male") {
$(xml).find('malename').children().each(function(){
fnames.push($(this).text());
});
}
if (sex == "female") {
$(xml).find('femalename').children().each(function(){
fnames.push($(this).text());
});
}
$(xml).find('lastname').children().each(function(){
lnames.push($(this).text());
});
wholename = fnames[Math.floor(Math.random() * fnames.length)] + " " + lnames[Math.floor(Math.random() * lnames.length)];
alert("wholename = " + wholename); //successfully alerts a randomized name
return wholename; //but returns undefined, or [object Promise] when using async/await
});
}
【问题讨论】:
-
预期结果是什么?
-
async function makeName(sex) {....var thexml = await getPromiseName(sex);... 删除thexml.done(function(xml) {... fini ... 注意:makeName现在将返回一个 Promise -
@JaromandaX 谢谢,我已经能够使用异步返回 chrome 显示为 [object Promise] 的内容,但是我如何获得明显隐藏在 Promise 中的字符串?
-
var thexml = await getPromiseName(sex);在这一点上我认为 thexml 不会是 Promise ...但是,由于您使用 jQuery 的 Promises 的糟糕借口,您的里程可能会有所不同
标签: javascript jquery ajax asynchronous