私は文章を取り、略語をデータベースから完全なものに置き換えるプログラムを書いています(例えば、 "hiとgm" - > "hello and good morning" ifデータベースに格納されている略語は、 "hi" - > "hello"と "gm" - > "good morning")です。元の文は$( '#translation').text()に格納されており、それに応じて置き換えてください。約束のForループを実行する
私は、forループが約束を使用して各単語のヘルパー関数getFullWord()を完了するまで、getFullSentence()を待機させる方法を見つけました。
問題は、getFullWord()が順番に実行されていないことです。私が "i"を記録すると、0,1,2,3の代わりに0,3,1,2が得られます。どうすればこの問題を解決できますか?前もって感謝します!
function getFullSentence(uid, sentence) {
var promises = [];
var words = sentence.split(" ");
$.each(words, function(i, word) {
promises.push(getFullWord(uid, word, i));
});
$.when.apply(null, promises).done(function() {
play($('#translation').text());
});
}
function getFullWord(uid, word, i) {
var defer = $.Deferred();
$.get("/checkAbbreviation/" + uid + "/" + word, function(data) {
word = data.full;
var currSentence = $('#translation').text() + " ";
var newSentence = currSentence + word.toUpperCase();
$('#translation').text(newSentence);
}).done(function() {
defer.resolve();
});
return defer.promise();
}
'$ .Deferred()' 'getFullWord()'関数、 'の.done(で必要はありません) 'はjQuery約束オブジェクトを返します。 'i'は' getFullWord'では使用されません。質問に「遊び」のテキストを含めることができますか? 'getFullSentence'から値が返されないのはなぜですか? '$ .get()'コールバックと '.done()'の代わりに '.then()'を '$ .get()'に連結して使用してください – guest271314
ありがとうございました! play()はResponsiveVoice.jsというライブラリを呼び出して、その文を話します。 getFullSentence()はplay()関数を呼び出すだけで何も返す必要はありません – sleepycow