gpt4 book ai didi

javascript - 不是作为 jQuery Deferred 执行的异步函数

转载 作者:可可西里 更新时间:2023-11-01 02:12:40 25 4
gpt4 key购买 nike

假设我想以同步方式处理一些任务,所以我有这个功能:

function executePromiseQueueSync(queue){
var seed = $.Deferred(),
finalPromise;

finalPromise = _.reduce(queue, function(memo, promise){
return memo.then(function(){
return promise.funct.apply(null, promise.argmnt);
});
}, seed.promise());

seed.resolve();
return finalPromise;
}

现在我可以用它来处理一些文件了:

_.each(fileList, function(element, index, list){
_.each(element, function(el, idx, lst){
promisesQueue.push({funct: processFile, argmnt:[el, index + (len - fileList.length) ,len]});
});
});

执行并显示进度:

executePromiseQueueSync(promisesQueue).then(function(){
....
}, function(){
....
}).progress(function(msg, progress, name, index, status, desc){
console.log('progress');
});

过程函数本身是这样的:

function processFile(file, index, size)
{
var dfd = new jQuery.Deferred();
if (file.name.match('(.*)\\.jpg'))
...
else if
...
else
$.when(processWrongFileType(file)).then(function(){
dfd.notify(...);
dfd.resolve();
});

return dfd.promise();
}

如您所见,当文件类型错误时,您无事可做:

所以有时候我想像一个promise一样执行同步代码:

function processWrongFileType(){
var dfd = new jQuery.Deferred();
dfd.resolve();
console.log("blah");
return dfd.promise();
}

问题是如果 processWrongFileType 将被执行,notify 将不起作用。如果我将 processWrongFileType 更改为如下所示:

function processWrongFileType()
{
var dfd = new jQuery.Deferred();
setTimeout(function(){dfd.resolve();},1);
return dfd.promise();
}

notify() 会起作用。有什么方法可以避免 setTimeout 并仍然让 notify() 处理进度事件?

最佳答案

您无需执行任何特殊操作即可将同步代码用作 promise。

只返回 ==true 的值

$.when((function() {
return prompt('really?')
})()).then((function() {
return alert('yeah')
})()).done((function () {
alert('done')
})())

关于javascript - 不是作为 jQuery Deferred 执行的异步函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15837964/

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