2017-06-19 5 views
1

Ich versuche synchrone Aufruf von Funktionen in meinem Knoten Js-Code.synchrone Funktionsaufruf in Knoten js

ich meine Funktionen nenne wie diese

set_authentication(); 
set_file(); 

function set_authentication(){ 
--- 
callback function 
--- 
} 

Ich möchte, dass meine set_authentication() Funktion zunächst vollständig ausgeführt werden soll und dann set_file() sollte die Ausführung beginnen, aber set_file() Funktion starten, bevor der Rückruf von set_authentication Ausführung().

ich dies mit Asynchron versucht haben, wie auch

async.series(
     [ 
      // Here we need to call next so that async can execute the next function. 
      // if an error (first parameter is not null) is passed to next, it will directly go to the final callback 
      function (next) { 
       set_looker_authentication_token(); 

      }, 
      // runs this only if taskFirst finished without an error 
      function (next) { 
       set_view_measure_file(); 
      } 
     ], 
     function(error, result){ 

     } 
    ); 

, aber es funktioniert auch nicht.

versuchte ich Versprechen auch

set_authentication().then(set_file(),console.error); 

function set_authentication(){ 
     --- 
     callback function 
     var myFirstPromise = new Promise((resolve, reject) => { 

     setTimeout(function(){ 
     resolve("Success!"); 
     }, 250); 
    }); 
     --- 
     } 

hier ich diese Störung erhalten: - Kann nicht Eigentum ‚und dann‘ undefinierten lesen.

Ich bin neu zu Knoten und js.

+0

die ein Versprechen nicht arbeiten, weil Sie das Versprechen, das Sie erstellt haben, nicht zurückgegeben haben, haben Sie auch 'then (set_file(), console.error)', tha t ruft set_file sofort auf, da Sie das '()' haben, das es anruft, anstatt es als Referenz zu übergeben: 'then (set_file, console.error)' –

Antwort

1

Wenn set_authentication async func ist, müssen Sie set_file als Rückruf an set_authentication Funktion übergeben.

Sie können auch in Betracht ziehen, Versprechen zu verwenden, wie Sie es geschrieben haben, aber Sie müssen es implementieren, bevor Sie mit der Verkettung beginnen.

+0

Ich habe versucht, set_file als Callback zu übergeben und von set_authentication aus aufzurufen Funktion aber immer noch meine set_file wird vor der Callback-Funktion aufgerufen. – user3649361

3

Sie müssen Promise zurückkehren, da Sie .then Methode einer zurück Versprechen nennen:

set_authentication().then(set_file); 
 

 
function set_authentication() { 
 
    return new Promise(resolve => {     // <------ This is a thing 
 
    setTimeout(function(){ 
 
    console.log('set_authentication() called'); 
 
    resolve("Success!"); 
 
    }, 250); 
 
    }); 
 
} 
 
     
 
function set_file(param) { 
 
    console.log('set_file called'); 
 
    console.log(
 
    'received from set_authentication():', param); 
 
}

+0

Hallo Danke für die Antwort, aber es gibt eine Callback-Funktion innerhalb meiner set_authentication() -Funktion Wenn ich etwas wie das verwenden. Funktion set_authentication() { callbackFunction(); return new Promise (auflösen => { setTimeout (function() { console.log ('set_authentication() genannt'); resolve ("Erfolg!"); }, 250); }); } noch meine set_file() wird vor der Callback-Funktion ausgeführt. – user3649361

+0

Bitte beachten Sie das Beispiel. 'callbackFunction' sollte in Klammern' new Promise (resolve => {HERE}) 'stehen. – terales

0

Verwendung async.auto wie folgt aus:

async.auto(
       { 
        first: function (cb, results) { 
         var status=true; 
         cb(null, status) 
        }, 
        second: ['first', function (results, cb) { 
         var status = results.first; 
         console.log("result of first function",status) 
        }], 
       }, 
       function (err, allResult) { 
        console.log("result of executing all function",allResult) 

       } 
      );