Осторожно, непроверено
Не знаком с лайком, но после быстрого изучения его исходной трески е он, кажется, не обеспечивает обещания, поэтому я написал небольшую обертку (на основе ЦСИ на связанную демо-странице):
//since swal doesn't implement promises on it's own, here a wrapper that returns one
function $swal(title, message, type){
return typeof message === "function"? $swal(title).then(message):
typeof title !== "object"? $swal({ title:title, message:message, type:type }):
config => $q(function(resolve){ window.swal(config, resolve) });
}
это должно вести себя так же, как регулярный своп-функция только что это возвращает обещание. нуждается в $q
от углового и инициализируется SweetAlert
Теперь asyncromity получить легко:
myArray.reduce(function(prev, value, index, arr){
//wait till the previous promise has been resolved,
//then resolve the this one
return prev.then(function(){
//return prev.catch(/* error handling for prev */).then(function(){
//utilize the wrapped function.
return $swal({
title: "Are you sure?",
text: "Your will not be able to recover this imaginary file!",
type: "warning",
showCancelButton: true,
confirmButtonColor: "#DD6B55",
confirmButtonText: "Yes, delete it!",
cancelButtonText: "No, cancel plx!",
closeOnConfirm: false,
closeOnCancel: false
//}).then(function(isConfirm){
}, function(isConfirm){ //this is just an alias for the previous line
console.log(index, isConfirm, value);
});
});
}, $q.resolve(true));
Я прохожу в разрешенной Promise, так что я не приходится иметь дело с кастрированный баран это первый или зависимый вызов.
сокращение также обертывает текущий индекс и значение для каждого вызова.
Одна вещь, которая еще не обработана, - это если ваш код вызывает ошибку.
Редактировать: Как отметил 4castle в комментарии, SweetAlert2, похоже, выполняет обещания.
Ну, тогда вам просто не нужна обертка $ swal и используйте регулярную функцию swal с уменьшением.
Возможный дубликат [Закрытие внутренних циклов JavaScript - простой практический пример] (http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example) – 4castle
@ 4castle Это не имеет ничего общего делать с закрытием JS в циклах. Его о том, чтобы вызвать обратный вызов, блокирует обработку цикла. –
Пойдите в мое решение, но очень быстро ... вы пытаетесь создать array.length количество ящиков подтверждения появляется сразу? потому что я уверен, что это будет результат того, что у вас есть. каждый раз, когда вы вызываете функцию sweetalert.swal, он создает окно подтверждения, так что вы либо получите потенциально много ящиков подтверждения, либо вы получите одно окно подтверждения, которое будет перезаписано связкой. вам может понадобиться переместить вызов функции сладкого окна outjde loop –