我遇到了序列和并行服务调用的主题。对于序列调用,我们可以使用flatmap / mergemap,对于并行调用,我们可以使用forkjoin。
以下是我的疑问
1)flatmap和mergemap有什么区别?是否有任何具体原因可以使用其中任何一种。
2)如何为4-5个电话添加多个序列?什么区分flatmap和mergemap如果我使用多个订阅?
this.service1.getCountry(
.mergeMap(country => this.service1.getState(country[0]))
.subscribe(state = > state.json());
);
3)forkjoin用于连接多个并行服务调用。如果我使用方法并在该方法中调用多个服务而不是使用forkjoin,该怎么办?使用forkJoin的任何具体原因
答案 0 :(得分:2)
<?php
require_once'core/init.php';
include'includes/head.php';
?>
<!--Navegacion-->
<?php
include('includes/navigation.php');
?>
<!-- Cabecera-->
<?php
include('includes/headerfull.php');
?>
<!--left side bar-->
<?php
include('includes/leftbar.php');
?>
<?php
$sql = "SELECT * FROM products WHERE featured = 1";
$featured= $db->query($sql);
?>
<!--Detalles-->
<!--main content-->
<div class="col-md-8">Main
<div class="row">
<h2 id="textoTitulo" class="text-center">Productos destacados</h2>
<?php while($product= mysqli_fetch_assoc($featured)):?>
<div class="col-md-3">
<h4><?php echo $product['title']?></h4>
<img src="<?php echo $product['image']?>" id="producto2" imagenProducto" alt=<?php echo $product['title']?> class="img-thumb" />
<p class="list-price text-danger">Precio del Mercado <s>₡<?php echo $product['list_price']?></s></p>
<p class="price">Nuestro precio: ₡<?php echo $product['price']?></p>
<button type="button" class="btn butn-sm btn-success" data-toggle="modal" data-target="#details-<?php echo $product['id'];?>">Detalles</button>
<?php include('includes/detailsmodal.php');?>
</div>
<?php endwhile;?>
</div>
</div>
<!--Detalles-->
<?php
?>
<!--right-->
<?php
include('includes/rightbar.php');
?>
<!--pie-->
<?php
include('includes/footer.php');
?>
//modal.php file
<div class="modal fade details-1" id="details-<?php echo $product['id'];?>" tabindex="-1" role="dialog" aria-labelledby="details-1" aria-hidden="true">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<button class="close" type="button" data-dismiss="modal" arial-label="Close">
<span aria-hidden="true">×</span>
</button>
<h4 class="modal-title text-center"><?php echo $product['title']?>
</h4>
</div>
<div class="modal-body">
<div class="container-fluid">
<div class="row">
<div class="col-sm-6">
<div class="center-block">
<img src="images/products/planta1.png" alt="Levis Jeans" id="viewProducto" class="details img-responsive">
</div>
</div>
<div class="col-sm-6"></div>
<h4>Detalles</h4>
<p><?php echo $product['description']?></p>
<hr>
<p>Precio :<?php echo $product['price']?></p>
<p>Marca: N/A</p>
<form action="add_cart.php" method="post">
<div class="form-group">
<div class="col-xs-3">
<label for="quantity">Cantidad:</label>
<input type="text" class="form-control" id="quantity" name="quantity">
<p>Disponibles: 3</p>
<div class="form-group">
<label for="size"></label>
Size:<select name="size" id="size" class="form-control">
<option value="36">36</option>
<option value="40">40</option>
<option value="50">50</option>
<option value="30">30</option>
</select>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
<div class="modal-footer">
<button class="btn btn-default" data-dismiss="modal">Cerrar</button>
<button class="btn btn-warning" type="submit"><img class="cartPNG" src="images/logos/cart.png"> Agregar a Carrito</button>
</div>
</div>
</div>
</div>
=== func parseJSONData(_ jsonData: Data?) -> [String : AnyObject]?
{
if let data = jsonData {
do {
let jsonDictionary = try JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.mutableContainers) as? [String : AnyObject]//Parses data into a dictionary
// print(jsonDictionary)
return jsonDictionary
} catch let error as NSError {
print("Error: \(error.localizedDescription)")
}
}
return nil
}
。 flatMap只是mergeMap运算符的别名。 (https://github.com/ReactiveX/rxjs/blob/master/src/add/operator/mergeMap.ts#L5-L6)有讨论要弃用一个别名,但到目前为止,v5都可用。
您可能对flatMap
运算符(https://github.com/ReactiveX/rxjs/blob/master/spec/operators/mergeMap-spec.ts#L308-L325)中的mergeMap
param感兴趣,该运算符订阅了多个内部可观察对象。
取决于用例。如果提供了可观察的gauranteed发射并等待完成,forkJoin可能是可行的。但是如果任何可观察的完成没有发射,forkJoin会短路并完成。相反,mergeMap更倾向于将内部可观察的发射平坦化为更高的可观察性。因此,在forkJoin的情况下,您将为每个innerobservable获取值emisssion数组,而mergeMap将在每个内部observable发出时立即发出单个值。