【发布时间】:2017-10-11 18:10:28
【问题描述】:
我如何一个接一个地执行两个承诺?
例如,在 JavaScript 中我可以
var promise1 = new Promise();
var promise2 = new Promise();
// await returns a result2 from promise2
await promise1.then(() => promise2);
如何在 Perl 6 中做同样的事情?
my $promise1 = Promise.new();
my $promise2 = Promise.new();
// Here I get only Promise2 object, not its result
await promise1.then({ $promise2 });
我必须像这样等待 $promise2 吗?
await promise1.then({ await $promise2 });
【问题讨论】:
-
即使在 JavaScript 中也是错误的。你应该一直在使用
await Promise.all([promise1, promise2])(如果你正在寻找它,然后从结果数组中获取第二个值),否则如果promise2在promise1解决之前被拒绝,你可能会得到未处理的拒绝。我敢肯定还有一个等同于Promise.all的 Perl -
你的第一个代码块不是一系列的承诺。两者都是并行执行的。
-
@Bergi,如果我需要在 promise2 中使用 promise1 的结果怎么办?假设 promise1 返回一些令牌,然后 promise2 使用它。通常我使用类似
promise1.then(result1 => promise2)Promise.all 的东西并行执行,而不是按顺序执行 -
@YuriyZhilovets 没关系,但是您不会在
then回调之外编写var promise2 = new Promise(…);- 您将在回调中构造它(使用令牌)。 -
它们是按顺序运行还是并行运行都没有关系。尝试
await $promise1, $promise2;,如果不起作用,请提出新问题。