2016-12-09 7 views
1

Es gibt eine Menge Fragen darüber, wie man Wert von Versprechen zurückgibt, aber ich sehe keine, die meine Frage beantwortet.Rückgabewert von Versprechen in einem anderen Versprechen

dies ist meine Funktion:

function f1(arr, num) { 
    return new Promise(function(resolve, reject) { 
     resolve(data); 
    }).then(function(data){ 
     f2.then(function(d){ 
      // how to return d 
     }).catch(...); 

     function f2(data){ 
      return new Promise(function(resolve, reject){ 
       data = data + 1 
       resolve (data); 
      }); 
     }; 
    }) 
    .catch(function(){...}); 
} 

Wie kann ich d in dieser Konfiguration zurückkehren?

+0

Sie können nicht. Sie kommen nicht von einem Rückruf zurück. Sie geben diesem Rückruf einen weiteren Rückruf, dann übergeben Sie "d" an den anderen Rückruf und verwenden ihn dort. Wenn Sie Rückrufe verwenden, müssen Sie sich auf Nebenwirkungen verlassen. Dies wird sich langsam in die "Callback-Hölle" auflösen, also sei vorsichtig. – Carcigenicate

+2

"Return' d' "* an wen/wo *? – deceze

+0

Hier, durch "langsam", @Carcigenicate \t bedeutet "sofort". –

Antwort

2

Ich glaube, Sie suchen

function f1(arr, num) { 
    return new Promise(function(resolve, reject) { 
     resolve(data); 
    }).then(function(data){ 
     return f2(data).then(function(d){ 
//  ^^^^^^ don't forget this 
//    ^^^^^^ call the function 
      return d; 
//   ^^^^^^^^^ simply and literally return d 
     }).catch(...); 

     function f2(data){ 
      return new Promise(function(resolve, reject){ 
       data = data + 1 
       resolve (data); 
      }); 
     }; 
    }) 
    .catch(function(){...}); 
} 

oder geschrieben besser als

function f1(arr, num) { 
    return Promise.resolve(data) 
    .then(f2) 
    .catch(function(){...}); 
} 

function f2(data){ 
    return new Promise(function(resolve, reject){ 
     … // do some async work 
     resolve(data + 1); 
    }); 
} 
Verwandte Themen