我制作了一个 Meteor.Method(我们称之为 fullFlow),它本身调用了一堆 Meteor 方法。我的目标是异步调用后续方法,因为后续方法需要前一个方法的 res 才能完成工作。
问题是,fullFlow 的回调在它运行的系列中的第一个方法之后返回,因为第一个方法获得了返回值(然后将其传递给下一个方法等)。
这是我的问题:我希望 fullFlow 方法等到系列中的最后一个方法完成并将其值返回给 fullFlow 的回调。
我假设我的结构都是错误的,这就是发生这种情况的原因。如果有人可以帮助我并修复我的流程或解释我缺少的内容,我将不胜感激,以便我可以修复它!
这是代码:
Meteor.methods({
step1(params) {
// work with params
return stuff
},
step2(params) {
// work with params
return stuff
},
step3(params3) {
// work with params
return stuff
},
fullFlow(params) {
Meteor.call('step1', params, function (err, res) {
if (err) {
throw new Meteor.Error(err);
} else {
Meteor.call('step2', res, function (err, res) {
if (err) {
throw new Meteor.Error(err);
} else {
Meteor.call('step3', res, function (err, res) {
if (err) {
throw new Meteor.Error(err);
} else {
return res;
}
})
}
})
}
})
}
})
function fullFlow() {
Meteor.call('fullFlow', params, function (err, res) {
if (err) {
console.log(err)
} else {
console.log(res)
}
})
}
fullFlow();
现在发生的情况是,当 step1 的回调与 res 一起调用时,它也在调用 fullFlow 的主回调。奇怪的部分是 fullFlow 方法的其余部分仍然继续执行并按预期运行(即,它在进入下一个方法之前等待前一个方法的 res 并正确传递它),但是通用回调已被触发。
我的问题是我需要让这个 fullFlow 函数连续运行。我的目标是等待函数的回调被调用,然后在该回调中,调用函数本身重新开始。如果在完整系列方法完成之前调用回调,这将无法正常工作。我还需要将系列中调用的最后一个方法的 res 返回到 fullFlow 回调!
有任何想法吗?