如何等待一个项目被保存在Javascript的解析库?



我正在按优先级排序一些项目。我用了一个循环。然而,我得到了一些奇怪的输出,比如[1,1,2,2,3]而不是[1,2,3,4,5](这些是优先级)。循环在下面。

const switchPriority = async function(catId, srcI, destI){
let indexofCat;
try {
for (let i = 0; i < data[0].length; i++) {
const element = data[0][i];
if(element.id === catId){
indexofCat = i;
}
} 
let Item = Parse.Object.extend('Item')
let itemQuery = new Parse.Query(Item)
for (let i = (srcI>destI?destI:srcI); i < (srcI>destI?(srcI+1):(destI+1)); i++) {
let id = data[1][indexofCat][i].id;
let item = await itemQuery.get(id);
item.set("priority",i+1);
await item.save();
}
} catch (error) {
alert(error)
}

}

为什么会有这样的问题?当我在循环中添加警报时,会有一些延迟,它会给出适当的输出。我怎么解决这个问题?我很感激你的帮助。

我不知道你是否忘记了,但是像这样使用async这个词是必要的await工作。您可以将代码插入到函数中:

async function parse(){
for (let i = (srcI); i < (destI); i++) {
// alert("index in loop "+ i);
let id = data[1][indexofCat][i].id;
let item = await itemQuery.get(id);
// alert(item.get("name"));
item.set("priority",i+1);
await item.save();
}
}

查看更多详细信息:https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Statements/async_function

你也可以承诺一个函数,你需要保证它在下一条指令之前执行。如何?

function createPromise (parameter) {
return new Promise((resolve, reject) => {
resolve(console.log(parameter))
})
}
async function test(){
console.log('First')
await createPromise('Promise')
console.log('Second')
}

test()

看:https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Promise

最新更新