2017-03-14 25 views
0

Ich muss die SP.RequestExecutor.js Bibliothek verwenden. Das Problem ist, dass ich die Async-Funktion im Synchronisierungsverhalten ausführen muss. Nach der Tiefensuche fand ich await und async Methoden, aber sie sind nicht kompatibel mit Internet Explorer (IE> 9). Wie kann ich die asynchronen Funktionen zur Synchronisierung und Kompatibilität mit IE> 9 und Chrome machen?Asynchron und synchron in javaScript

function executorRun() { 
    console.log('end2'); 
    var executor = new SP.RequestExecutor('path'); 
    var result=[]; 
    executor.executeAsync({  
     url: 'URL', 
     method: "POST", 
     headers: { 
      "accept": "application/json;odata=verbose", 
      "content-type": "application/json;odata=verbose",  
     }, 
     data: JSON.stringify(requestData), 
     success: function (data) { 
     console.log('end3') 
     console.log(data);//Debug statement 
     //Handle data and store in result  
     },  
     error: function (error) { 
     console.log(error); 
     } 
    }); 
    return result; 
} 

async function test() { 
    console.log('end1'); 
    const data = await executorRun(); 
    console.log('end4'); 
} 

test(); 

Ich brauche die Ausgabe ass folgt:

end1 end2 end3 end4.

Der obige Code wird in Chrom ausgeführt, aber auf IE verweigern die await und async.

+0

Könnten Sie bitte Ihren Code zeigen? –

+0

@Muhammad Qasim PLZ sehen das Update – myomyo

+0

diese sind schlecht formatierten Code – syarul

Antwort

0

Damit await funktioniert, muss executorRun eine Promise zurückgeben.

function executorRun() { 
    console.log('end2'); 
    return new Promise(function (resolve, reject) { 
    var executor = new SP.RequestExecutor('path'); 

    executor.executeAsync({  
     url: 'URL', 
     method: "POST", 
     headers: { 
      "accept": "application/json;odata=verbose", 
      "content-type": "application/json;odata=verbose",  
     }, 
     data: JSON.stringify(requestData), 
     success: function (data) { 
      console.log('end3'); 
      console.log(data);//Debug statement 
      //Handle data and store in result  
      resolve(data); 
     },  
     error: function (error) { 
      reject(error); 
      console.log(error); 
     } 
    }); 
    }); 
} 

async function test() { 
    console.log('end1'); 
    const data = await executorRun(); 
    console.log('end4'); 
} 

test(); 

Um async/await in IE9 zu verwenden, coudl Sie Ihren Code mit Babel transpile.

Sie könnten auch nur die Promise ohne den syntaktischen Zucker von async/await direkt verwenden:

function test() { 
    console.log('end1'); 
    executorRun().then(function (data) { 
    console.log('end4'); 
    }); 
} 

test(); 

IE nicht Promises nativ unterstützen, aber sie können leicht mit einem der vielen Versprechen Bibliotheken aus pollyfilled werden Dort.

Wenn Sie wollen Versprechungen nicht verwenden, können Sie immer nur ändern excecutorRun einen Rückruf zu akzeptieren:

function executorRun(callback) { 
    console.log('end2'); 
    var executor = new SP.RequestExecutor('path'); 

    executor.executeAsync({  
     url: 'URL', 
     method: "POST", 
     headers: { 
      "accept": "application/json;odata=verbose", 
      "content-type": "application/json;odata=verbose",  
     }, 
     data: JSON.stringify(requestData), 
     success: function (data) { 
      console.log('end3'); 
      console.log(data);//Debug statement 
      //Handle data and store in result  
      callback(data); 
     },  
     error: function (error) { 
      console.log(error); 
     } 
    }); 
} 

function test() { 
    console.log('end1'); 

    executorRun(function (data) { 
    console.log('end4'); 
    console.log(data); 
    }); 
} 

test(); 
+0

Danke die erste Wahl, was ich brauche mit Babel kann von allen Browsern kompatibel sein – myomyo

Verwandte Themen