我有一个函数,它的任务是遍历许多文件(这些文件使用数组中的值作为文件名的构建块),并使用reduce
下载它们。到目前为止,这更像是一种黑客行为,但Promise
逻辑应该可以工作。除了它没有。t
下面是我的代码:
function import_demo_files(data) {
/**
* Make a local copy of the passed data.
*/
let request_data = $.extend({}, data);
const get_number_of_files_1 = Promise.resolve({
'data' : {
'number_of_files' : 2
}
});
return new Promise((resolve, reject) => {
let import_files = get_number_of_files_1.then(function(response) {
new Array(response.data.number_of_files).fill(request_data.step_name).reduce((previous_promise, next_step_identifier) => {
let file_counter = 1;
return previous_promise.then((response) => {
if( response !== undefined ) {
if('finished_import' in response.data && response.data.finished_import === true || response.success === false) {
return import_files;
}
}
const recursively_install_step_file = () => import_demo_file({
demo_handle: request_data.demo_handle,
'step_name': request_data.step_name,
'file_counter': file_counter
}).call().then(function(response) {
file_counter++;
if('file_counter' in response.data && 'needs_resume' in response.data) {
if(response.data.needs_resume === true) {
file_counter = response.data.file_counter;
}
}
return response.data.keep_importing_more_files === true ? recursively_install_step_file() : response
});
return recursively_install_step_file();
}).catch(function(error) {
reject(error);
});
}, Promise.resolve())
}).catch(function(error) {
reject(error);
});
resolve(import_files);
});
}
现在,当我这样做的时候:
const import_call = import_demo_files({ 'demo_handle' : 'demo-2', 'step_name' : 'post' });
console.log(import_call);
console.log
告诉我,import_call
实际上是一个promise ,它是解析的。我非常喜欢return
允许我摆脱承诺链的方式,但我不知道如何正确地解析其中的承诺链,所以很明显,它被标记为已解决。
我想做import_call.then(...
,但到目前为止还不起作用,因为import_demo_files
中的不正确处理,它在实际完成之前在这里执行了这段代码。
https://stackoverflow.com/questions/56756911
复制相似问题