这是我第一次尝试使用异步JavaScript。我已经试过把我能找到的承诺的每一个化身都联系起来,但是还没有能够成功地写出它们来让我的字符串返回(即$ .Deferred,async/await,Promise,callbacks,依靠.done)。异步:false作为ajax变量的作品,但我试图避免解决我所知道的是不好的做法。我很乐意使用异步/等待,因为它非常简洁,但在这一点上,我为任何有效的工作而努力。我有一个怀疑,我试图以不正确的方式利用$ .ajax返回。
非常感谢字符串全名(一个随机的姓和名)的工作返回,为我自己的教育的几个版本的例子更赞赏!
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
});
}
什么是预期的结果? – guest271314
'异步函数makeName(sex){'....'var thexml = await getPromiseName(sex);'... remove'thexml.done(function(xml){'... fini ...注意:'' makeName'现在会返回一个Promise –
@JaromandaX谢谢你,我已经能够使用async返回什么chrome显示为[object Promise],但是如何获得字符串显然隐藏在Promise中? –