gpt4 book ai didi

javascript - 在 while 循环 javascript 中 promise

转载 作者:行者123 更新时间:2023-11-30 11:50:00 25 4
gpt4 key购买 nike

我正在尝试概括一个使用 OpenPGP 库加密表单的脚本。我在使用客户端代码 (Javascript) 时遇到了一些麻烦:

var working = formID.elements[0];
var counter = 0;

while (working) {
encrypt(working.value).then(function(encrypted_msg) {
console.log("processing");
working.value = encrypted_msg;
});
console.log("assuming processed");
var counter = counter + 1;
var working = formID.elements[counter];
}

以下代码应获取每个表单元素并加密其值。但是,while 循环不会等待异步 encrypt() 函数被解析。

我认为我需要在这种情况下使用 promises,但我不知道如何在 while 循环中使用一些教程。

帮助?

最佳答案

可能可以使用 jQuery 延迟列表,如下所示:

var deferreds = [];

$.each(formID.elements, function(key, working){

var deferred = $.Deferred();
deferreds.push(deferred);

encrypt(working.value).then(function(encrypted_msg) {
console.log("processing");
working.value = encrypted_msg;
deferred.resolve();
});

});

$.when.apply( $, deferreds ).done(function(){
console.log( 'after all encryptions!' );
});

当然可以用原生的Promise对象代替$.Deferred,不过我觉得$.Deferredmore cross-browser way .

UPD2:

基于原生 PromisePromise.resolve() 改进的答案(感谢@Bergi)。对于 encrypt() 返回正确 promise 的情况,可以跳过方法 Promise.resolve()

var promises = [];

$.each(formID.elements, function(key, working){

var promise = Promise.resolve(encrypt(working.value))
.then(function(encrypted_msg) {
console.log("processing");
working.value = encrypted_msg;
});

promises.push(promise);

});

Promise.all(promises).then(function(){
console.log( 'after all encryptions!' );
});

关于javascript - 在 while 循环 javascript 中 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39753376/

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