2017-11-10 3 views
0

Ich habe das folgende Snippet enthält ein Versprechen:Holen Sie den Rückgabewert einer Funktion innerhalb Versprechen

... 
return Promise.all([postHTTP()]) 
.then(function (results) { 
    loginToken = results[0].data.token; 
    console.log("token:" + loginToken); 
    }) 
    .catch(error => { 
    throw error; 
}); 
... 

Und die Funktion:

function postHTTP() { 
    request.post({ 
     headers: { 'content-type': 'application/json' }, 
     url: 'http://localhost:55934/api/Token', 
     body: { "email": "[email protected]", "password": "test" }, 
     json: true 
    }, function (error, response, body) { 
     if (error) { 
      throw error; 
     } 
     console.log("return test"); 
     return body.token; 
    }); 

Altough der String "Return-Test" gedruckt wird, es gibt mir einen Fehler in der Verheissung wie folgt:

(node:15120) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): TypeError: Cannot read property 'token' of undefined 

Kann mir jemand helfen, einen zu finden Lösung oder die Problemquelle dafür?

Vielen Dank im Voraus, Diogo Santos

+1

ich Sie nicht sehen, 'return' Ihre' request.post' in 'postHTTP'; Es gibt also undefined zurück, was zu einem n Fehler führen würde, wenn Sie es nicht in Promise.all() eingefügt hätten. – skyboyer

Antwort

1

Das Problem in Ihrer postHTTP Funktion. Wenn die Arbeit mit Multi Versprechen Sie Reihe von Versprechungen in Promise.all passieren müssen, damit funktionieren Sie wie folgt aussehen muss:

function postHTTP() { 
    return new Promise(function (resolve, reject) { 
    request.post({ 
     headers: { 'content-type': 'application/json' }, 
     url: 'http://localhost:55934/api/Token', 
     body: { "email": "[email protected]", "password": "test" }, 
     json: true 
    }, function (error, response, body) { 
     if (error) { 
      return reject(error); 
     } 
     console.log("return test"); 
     return resolve(body.token); 
    }); 
    }); 
} 
Verwandte Themen