:orphan: Basic Registrations =================== As a default, registrations use exact matching, i.e. a callee which registers a procedure URI ``com.myapp.procedure1`` will receive calls for ``com.myapp.procedure1`` only. There are, however, also :doc:`pattern-based registrations ` which can be selected via an option when registering. Note: There are some :doc:`specific rules regarding URI formatting ` . Further, as a default only a single registration for a URI is allowed, i.e. once one component has registered a procedure for an URI ``com.myapp.topic1``, all further attempts to register a procedure for this URI will be rejected. There are, however, :doc:`shared registrations ` which can be seleted via an option when registering. Here's an example for a simple registration in JavaScript using Autobahn\|JS: .. code:: javascript session.register("com.myapp.procedure1", procedure1); This is equivalent to .. code:: javascript session.register("com.myapp.procedure1", procedure1, { match: "exact", invoke: "single" }) Returning a Promise ------------------- A lot of functions that you register will just return synchronously, but when code within your function runs asynchronously, you can return a promise from the function, which is then resolved once the async code has finished. Here is an example for JavaScript, using Autobahn\|JS and its default promises library (when.js): .. code:: javascript function procedure1 (args, kwargs, details) { var d = autobahn.when.defer(); setTimeout(function() { d.resolve("async finished"); }, 1000); return d.promise; }