【发布时间】:2017-09-07 18:56:54
【问题描述】:
我得到了这样的东西:
methods: {
process: function process(id) {
this.$http.post('controller/process', { id: id }).then(function (res) {
if (res.data.items > 0) {
this.process(id);
} else {
return true;
}
}, function (data) {
this.$notify(data, 'danger');
this.progress = false;
});
},
run: function run($id) {
this.busy = true;
this.process($id);
this.busy = false;
}
},
好的 - 这是一些使用 Vue.js 和 vue-resource 进行 API 调用(进程)的 JavaScript。 API 返回要处理的元素数量。如果此数字 > 0,则应再次执行该函数。这很好用。
现在我想解决以下问题:
执行run函数应该设置this.busy = true。函数process处理完所有项目后,this.busy应设置为false。
所以我读了一些关于 Promise 的文章——但我仍然不明白在这种情况下如何使用它们。
【问题讨论】:
-
如果您从该函数返回承诺,您可以在递归函数返回
then语句后执行您的代码。例如YourClass.process(id).then(result => doSomethingWith(result))。如果你这样做,你就不需要使用忙标志。 -
既然
process函数是一个promise,那么你可以做this.process($id).then(function() { this.busy = false; } );
标签: javascript promise vue.js