簡體   English   中英

從Javascript函數中提取dataURL

[英]Extract dataURL from Javascript function

我有一個旨在使用FileReader創建文件的dataURL的函數。 考慮這個例子。

toDataURL(url, callback){
  var xhr = new XMLHttpRequest();
  xhr.open('get', url);
  xhr.responseType = 'blob';
  xhr.onload = function(){
    var fr = new FileReader();
    var test = fr.onload = function(){
      callback(this.result);
    };

    fr.readAsDataURL(xhr.response); // async call
  };

  xhr.send();
}

我想將內聯函數中的變量this.result提取為返回變量。 它沒有其他功能。 我該怎么做?

基本上,您要做的是從異步函數返回一個值,您可以使用Promises以及可選的async / await來實現。

看一下這個:

 function toDataURL(url, callback) { return new Promise( function(resolve, reject) { var xhr = new XMLHttpRequest(); xhr.open('get', url); xhr.responseType = 'blob'; xhr.onload = function() { var fr = new FileReader(); var test = fr.onload = function() { resolve(this.result) callback(this.result); }; fr.readAsDataURL(xhr.response); // async call }; xhr.onerror = function() { reject('Error); } xhr.send(); }); } const result = await toDataURL('some url'); // or toDataURL('some url').then((result) => { // do something with the result }); 

您可以嘗試使用Promise ,如下所示:

toDataURL(url){
  var promise = new Promise(function (extract) {
    var xhr = new XMLHttpRequest();
    xhr.open('get', url);
    xhr.responseType = 'blob';
    xhr.onload = function(){
      var fr = new FileReader();
      var test = fr.onload = function(){
        extract(this.result);
      };

      fr.readAsDataURL(xhr.response); // async call
    };

    xhr.send();
  });

  return promise;
}

(async function () {
  var result = await toDataURL('/someurl');

  console.log(result);
}());

toDataURL函數內部,我們創建了一個toDataURL 返回結果時,我們只需要將其放入extract方法中即可。

然后,我們創建一個異步函數以使用await關鍵字直接獲取結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM