gpt4 book ai didi

javascript - 事件发生后按顺序解决 promise

转载 作者:行者123 更新时间:2023-12-03 01:00:40 25 4
gpt4 key购买 nike

参见fiddle 。我希望允许我的应用程序根据需要将项目推送到队列中,以便在用户事件(例如,单击)上解决。

我现在通过 obtainItem() 执行此操作,在其中创建 toDo 作为 promise 并将其推送到 obtainedItemsQueue 中,但是事件全部立即解决,而不是等待通过单击按钮来解决。

在此示例中,应该发生的是:

  • 用户应收到 map 已获取的通知,然后点击“确定”
  • 点击“确定”后,他们将收到袋子已获得的通知
  • 最后,点击“确定”后,他们将收到衬衫已获得的通知

如何将多个 Promise 推送到队列中,并解析点击等事件?

let obtainedItemsQueue = [];

function obtainItem(itemStr) {
let toDo = new Promise(resolve => {
$('.content').append(`<span class="text">${itemStr}</span>`);
$('.content').append('<button>Okay</button>');
$('button').on('click', function() {
$('.content').empty();
resolve(`${itemStr} is resolved.`);
});
});

obtainedItemsQueue.push(toDo);
}

obtainItem('map');
obtainItem('bag');
obtainItem('shirt');

function resolveItems() {
let chain = Promise.resolve();
obtainedItemsQueue.forEach((item) => {
chain = chain.then(() => item);
});


return chain;
}

resolveItems();

最佳答案

updated fiddle

toDo 更改为返回 Promise 的函数

let obtainedItemsQueue = [];

function obtainItem(itemStr) {
let toDo = () => new Promise(resolve => {
$('.content').append(`<span class="text">${itemStr}</span>`);
$('.content').append('<button>Okay</button>');
$('button').on('click', function() {
$('.content').empty();
resolve(`${itemStr} is resolved.`);
});
});

obtainedItemsQueue.push(toDo);
}

obtainItem('map');
obtainItem('bag');
obtainItem('shirt');

并更改链。然后执行item,它现在是一个函数

function resolveItems() {
let chain = Promise.resolve();
obtainedItemsQueue.forEach((item) => {
chain = chain.then(item);
});
return chain;
}

resolveItems();

关于javascript - 事件发生后按顺序解决 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52637256/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com