我有一个像这样的代码块:
val await1: List[Int] = await(futureMethod(id))
val mapped = await1.map(entry => {
(pq.id, await(anotherFutureMethod(entry.id)))
})
这是因为" await不能在嵌套函数下使用"我怎么能绕过这个?为什么这会成为问题?
答案 0 :(得分:4)
我不得不猜测你的函数的签名,但是一个例子看起来像这样:
def futureMethod(id: Int): Future[List[Int]] = Future.successful(0 to id toList)
def anotherFutureMethod(id: Int): Future[String] = Future.successful(id.toString)
def finalFuture(id: Int) = async {
val await1 = await(futureMethod(id))
val mapped = Future.sequence(await1 map anotherFutureMethod)
await(mapped)
}
使用Future.sequence
可能是一种可能的非阻止解决方案,以避免使用嵌套的await
调用。
答案 1 :(得分:1)
你想要链接未来的电话,而不是阻止它们。闭塞 期货违背了未来的目的。
$('input[name^="meals"]').change(function() {
var sum = 0;
$(this).closest('fieldset').find('input[name^="meals"]').each(function({
//loop only those elements which are inside that fieldset
sum+= parseInt($(this).val());
});
// Set the sum
$(this).closest('fieldset').find('.sum').val(sum);
//get `.sum` belonging to `fieldset` to which current input belongs
// If the sum == 7 then show the button otherwise
// hide it
if (sum == 7) {
$('#button-cart').closest('.btn').show();
$("div.error").html("Your percentage fields must sum to 7.").hide();
}
else {
$('#button-cart').closest('.btn').hide();
$("div.error").html("Your percentage fields must sum to 7.").show();
}
});