Angular 如何调用为循环中的每个项数组返回承诺的函数 public takePicture(){ let options:CaptureImageOptions={limit:3}; 返回此.mediaCapture.captureImage(选项) 。然后((数据:MediaFile[])=>{ 控制台日志(数据); for(设i=0;i{ 这个。保存(保存); }); } }) .catch((err:CaptureError)=>{console.log(err)}); }
我正在尝试从相机拍摄到手机的每个图像,以调用beforeSave()。然而,只有第一次,承诺才得到回报。我应该如何实现我的代码,以便对数据数组中的每个项目执行该操作?您将立即返回,而for循环没有完成。尝试删除Angular 如何调用为循环中的每个项数组返回承诺的函数 public takePicture(){ let options:CaptureImageOptions={limit:3}; 返回此.mediaCapture.captureImage(选项) 。然后((数据:MediaFile[])=>{ 控制台日志(数据); for(设i=0;i{ 这个。保存(保存); }); } }) .catch((err:CaptureError)=>{console.log(err)}); },angular,for-loop,promise,ionic3,angular5,Angular,For Loop,Promise,Ionic3,Angular5,我正在尝试从相机拍摄到手机的每个图像,以调用beforeSave()。然而,只有第一次,承诺才得到回报。我应该如何实现我的代码,以便对数据数组中的每个项目执行该操作?您将立即返回,而for循环没有完成。尝试删除返回按钮 public takePicture() { let options: CaptureImageOptions = { limit: 3 }; return this.mediaCapture.captureImage(options) .then((da
返回按钮
public takePicture() {
let options: CaptureImageOptions = { limit: 3 };
return this.mediaCapture.captureImage(options)
.then((data: MediaFile[]) => {
console.log(data);
for (let i = 0; i <= data.length; i++) {
return this.beforeSave(data[i].fullPath).then((save) => {
this.save(save);
});
}
})
.catch((err: CaptureError) => { console.log(err) });
}
public takePicture(){
let options:CaptureImageOptions={limit:3};
返回此.mediaCapture.captureImage(选项)
。然后((数据:MediaFile[])=>{
控制台日志(数据);
for(设i=0;i{/!!删除此处的返回
这个。保存(保存);
});
}
})
.catch((err:CaptureError)=>{console.log(err)});
}
如果此处的目标是保存捕获的所有图像,并将完成或错误反馈给调用者,则可以更改为.map()
以收集承诺数组,并使用Promise.all()
监视该承诺数组。该代码如下所示:
public takePicture() {
let options: CaptureImageOptions = { limit: 3 };
return this.mediaCapture.captureImage(options)
.then((data: MediaFile[]) => {
console.log(data);
for (let i = 0; i < data.length; i++) {
this.beforeSave(data[i].fullPath).then((save) => { // !! Remove the return here
this.save(save);
});
}
})
.catch((err: CaptureError) => { console.log(err) });
}
仅供参考,这假设您使用的
this.beforeSave()
和this.save()
是正确的。我不知道这些接口,所以我只是在这方面由你牵头。你认为承诺吗。所有的都能帮助你吗@你能举个例子吗?哦,你马上回来,好吧,让我试试。尝试删除答案中的return
关键字。此外,它应该是I答案。此方法的一个问题是它不会处理this.beforeSave()中的错误
promise-chain或在this.save()
中。它会忽略这些错误,甚至可能以未经处理的退出
结束。此外,它不会将错误传播回调用者,也不会让调用者知道一切都完成了。我想你关于使用Promise.all()
的第一条评论可能就是这个需要的。@jfriend00你能推荐一个更好的解决方案吗?@AliF50这需要时间来调用save()为什么?
public takePicture() {
let options: CaptureImageOptions = { limit: 3 };
return this.mediaCapture.captureImage(options).then((data: MediaFile[]) => {
console.log(data);
// collect array of promises and use Promise.all() to monitor them
return Promise.all(data.map(item => {
return this.beforeSave(item.fullPath).then((save) => {
return this.save(save);
});
}));
}).catch((err: CaptureError) => {
// log error, then rethrow so caller can see the error
console.log(err)
throw err;
});
}