【发布时间】:2019-03-18 01:34:21
【问题描述】:
我正在尝试重构使用反模式的代码,但仍然不明白如何重构这样的东西: 我现在有一个像这样工作的函数:
export async function submit(data) {
return new Promise(async function(resolve, reject) {
...
let list = await getList();
...
for (let i = 0; i < list.length; i++) {
let data = await getData(list[i]);
}
...
for (let i = 0; i < list.length; i++) {
let response = await uploadFile(list[i]);
}
我把这个函数称为:
let response = await submit(data);
我了解 new Promise 中的异步功能有问题,但如何解决?
export async function submit(data) {
return new Promise(async function(resolve, reject) {
let files = getFiles();
let prepareUrlsResponse = await prepareUrls(paths);
if (prepareUrlsResponse.error === true) {
resolve( { success: false });
} else {
let blobs = [];
for (let i = 0; i < prepareUrlsResponse.data.length; i++) {
let fileData = await RNFetchBlob.fs.stat(filePath);
blobs.push(fileData);
}
for (let i = 0; i < blobs.length; i++) {
let item = blobs[i];
let response = await uploadFile(
item.url,
item.blob
);
if (response && response.uploadSuccess === false) {
resolve( { success: false });
break;
}
}
}
api.post(
endpoint,
data,
response => {
if (response.ok) {
resolve( { success: true, response: response });
} else {
resolve( { success: false });
}
}
);
});
}
【问题讨论】:
-
请贴出函数的完整代码,最重要的是你调用
resolve和reject的部分。 -
我更新了问题。我删除了一些不相关的部分,但保留了我解决的所有地方。我试图删除
new Promise(),但是当return我得到undefined。
标签: javascript promise async-await es6-promise