在函数组合时,如果有异步操作,那么ramda中compose应该怎么写呢?
在写空间查询例子的时候,就遇到了这个问题,其中doQuery方法是一个异步函数。
解决方法是一个andThen函数。
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| let highLightHandler: __esri.Handle = null; const highLight = (features: Array<Graphic>) => { view.whenLayerView(featureLayer).then(layerView => { if (highLightHandler) { highLightHandler.remove(); } highLightHandler = layerView.highlight(features); }); }
const doQuery = async query => { const result = await featureLayer.queryFeatures(query); const { features } = result; return features; }
const generateQuery = (geometry: Geometry) => new Query({ returnGeometry: true, outFields: ["NAME", "OBJECTID"], geometry, outSpatialReference: view.spatialReference, spatialRelationship: "intersects" });
const showInTable = (features: Graphic[]) => { const attributes = features.map(feature => feature.attributes); console.table(attributes); }
const showQueryResult = (features: Graphic[]) => { showInTable(features); highLight(features); graphicsLayer.removeAll(); }
const workFlow = R.compose( R.andThen(showQueryResult), doQuery, generateQuery );
sketch.on("create", event => { if (event.state === "complete") { const geometry = event.graphic.geometry; workFlow(geometry); } });
|