我不确定如何在我的mobx商店实施承诺.我有两个动作,我想在循环中顺序运行,并确保在运行第二个之前等待第一个完成.这是我的商店代码示例.请询问任何进一步的说明,我一定要加上.我试图将代码简化为我认为找到解决方案所必需的内容.谢谢!
import { observable,action } from 'mobx'; import Store from '../support/store'; class Upload extends Store { @observable fileList = null; // array of files to be uploaded @observable processedFile = null; // single file pre-processed for upload @action processFile(file) { // takes file from fileList array,'processes' it and // places the result in this.processedFile } @action post() { // makes a POST request,uploading this.processedFile // sets this.processedFile = null } @action postFileList() { // loops over the array this.fileList // runs this.processFile(file) // waits until processFile(file) is finished // runs post() // waits until post() is finished // removes file from the this.fileList array } }
解决方法
如果您在操作中执行异步操作,则需要确保
wrap the asynchronously called function in an action as well.
你可以创建一个递归的postFileList,当fileList中没有剩下的文件时,它会退出.
例
class Upload extends Store { @observable fileList = []; @observable processedFile = null; @action processFile(file) { return new Promise(resolve => { const file = this.fileList[0]; setTimeout(action(() => { this.processedFile = file.processed; resolve(); }),1000); }); } @action post() { return new Promise(resolve => { const file = this.processedFile; setTimeout(action(() => { this.processedFile = null; resolve(); }),1000); }); } @action postFileList() { if (this.fileList.length === 0) { return; } this.processFile() .then(() => this.post()) .then(action(() => { this.fileList.shift(); this.postFileList(); })); } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。