I recommend you look at this page in the Lightning Components Documentation: Calling a Server-Side Action.
Using parts of the example code provided, you could set up a server-side "echo" that gets returned to your client side controller when the action method is complete as described at the bottom of the 2nd code section on that page following where the action method is enqueued:
In the client-side controller, we use the value provider of c to invoke a server-side controller action. We also use the c syntx in markup to invoke a client-side controller action. The cmp.get("c.serverEcho") call indicates that we are calling the serverEcho method in the server-side controller. The method name in the server-side controller must match everything after the c. in the client-side call.
There are several notes on the page of importance. This note may one that applies to what's happening in your code:
If your action is not executing, make sure that you're not executing code outside the framework's normal rerendering lifecycle. For example, if you use window.setTimeout() in an event handler to execute some logic after a time delay, wrap your code in $A.getCallback(). You don't need to use $A.getCallback() if your code is executed as part of the framework's call stack; for example, your code is handling an event or in the callback for a server-side controller action.
One of things to note that could also be useful to you is the following:
Always add an isValid() check if you reference a component in asynchronous code, such as a callback or a timeout. If you navigate elsewhere in the UI while asynchronous code is executing, the framework unrenders and destroys the component that made the asynchronous request. You can still have a reference to that component, but it is no longer valid. Add an isValid() call to check that the component is still valid before processing the results of the asynchronous request.
Additionally, there's this:
setCallback() has a third parameter that registers the action state that invokes the callback. If you don't specify the third argument for setCallback(), it defaults to registering the SUCCESS and ERROR states. To set a callback for another state, such as ABORTED, you can call setCallback() multiple times with the action state set explicitly in the third argument. For example:
Should none of the above solve your issue, It would seem your only recourse will be to insert the record yourself in a synchronous operation if you want to improve performance and obtain reliable confirmation within your component that the action method has completed.
The toast event is available only inside the lightning container and wont be available when you use lightning out on VF .
If you create a tab out of the component and if you are inside lightning experience ,you will be able to find toast event .
You will have to spin your own toaster for such scenario using ,
if(toastEvent){
//fire the event
}else{
//Your own version of toast using SLDS
}
Best Answer
Got answer in this question. They don't work in VF / classic view or in standalone apps.