これは私の非同期javascriptを初めて利用しようとする試みです。私は見つけることができますが、私の文字列を返すために正常にそれらを書くことができなかった約束のすべての化身を接続しようとしました(つまり、$ .Deferred、async/await、約束、コールバック、。 async:ajax変数としてのfalseは機能しますが、私は悪い習慣であると私が理解していることを解決しようとしています。私はasyncを使うのが大好きだと思います。なぜなら、それはとても簡潔だからです。しかし、この時点で、私は何かのために働いています。私は間違った方法で$ .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
'async function asymml.done(function(xml){' ... fini ... '' ... '' .... '今度はプロンプトを返すようになりました –
@JaromandaXありがとう、私は非同期を使って[オブジェクトの約束]としてクロムが表示するものを返すことができましたが、次にどのように文字列をプロミスに隠すのですか? –