【发布时间】:2023-01-24 16:56:40
【问题描述】:
在承诺中,我想为从一个类(在循环中)创建的几个对象的属性分配一个值,但是在执行函数并执行 .then(() => console.log(r)) 事情时,r 没有修改为承诺承诺的内容我会的。
这里:
function assignSentenceImageDescription () {
return new Promise((resolve, reject) =>
{
assigningWordsPartOFSpeech().then((r) => {
JSON.parse(r).sentences.forEach((sentence) => {
let adjectiveBeforeNoun = [];
let sentenceImageDescription = [];
sentence.words.forEach((wordInSentence) => {
try {
if (wordInSentence.partOfSpeech[0].wordtype === "n.") {
let imageDescription = adjectiveBeforeNoun.join('') + wordInSentence.partOfSpeech[0].word;
sentenceImageDescription.push(imageDescription)
adjectiveBeforeNoun = [];
} else if (wordInSentence.partOfSpeech[0].wordtype === "superl.") {
adjectiveBeforeNoun.push(wordInSentence.partOfSpeech[0].word + " ")
}
} catch (e) {
console.log("===NOT IN DICTIONARY===")
}
})
sentence.imageDescription = sentenceImageDescription;
}
)
resolve(r);
}
);
}
);
}
在线上
sentence.imageDescription = sentenceImageDescription;
我尝试为每个重复的句子分配图像描述,但是当我这样做时
assignSentenceImageDescription().then(r => console.log(r));
r 对象仍然没有将其每个 sentences 的 imageDescription 属性修改为数组 sentenceImageDescription 所具有的值,而这正是 assignSentenceImageDescription() 函数的目的。
【问题讨论】:
-
因为
assigningWordsPartOFSpeech()已经返回一个 Promise,将它包装在 Promise 构造函数中是一种反模式 - 你也是resolve(r);...这意味着函数assignSentenceImageDescription返回一个解析为原始 JSON 的 Promise,所以什么都没有你已经完成了那个 JSON 字符串的效果 -
@Bravo 在该函数中,如果我在没有 .the() 功能的情况下使其同步(而不是 resolve 我返回 r),那么我将得到未定义。有什么建议吗?
-
if I make it syncronous你不能让异步函数同步 -
@Bravo 有什么建议吗?请
标签: javascript