搜尋

首頁  >  問答  >  主體

javascript - 函數執行完畢後再回傳值

想請問一下 就是我有一個函數比較長 邏輯比較多 然後在函數的一開始定義了一個空數組 函數的作用就是在這個數組中添加元素 然後將這個數組返回出去。我現在遇到的問題是 在函數執行 返回數組的時候 返回的是一個
# 如圖片的長度為0的數組。所以想請問一下 除了setTimeout({})外 還有什麼辦法 可以讓函數執行完畢後再回傳內容

怪我咯怪我咯2779 天前501

全部回覆(2)我來回復

  • 習慣沉默

    習慣沉默2017-05-19 10:11:36

    說實話,我是沒看懂你想問的問題,也沒看到代碼,看了你和上面的對話,也依舊是一臉懵逼,我只能按我自己猜測的想法來講。

    1.首先,樓上講得沒錯,長度不是0,array的長度請看length的值,你那裡是1,所以沒問題

    2.其次,在控制台裡面打印的內容不一定是完整的,就比如說,相關數組還在操作過程中的時候,無論添加還是刪除數組裡的元素都不會直接反應到控制台,唯有當你操作了,比如說點開,或是重啟控制台的時候才會進行一次更新。

    3.至於如何函數運行完才返回數組這是一個很模糊的問題,首先要看你的函數裡面有沒有異步操作,如onload事件之類的,如果沒有,到函數的最後一行return 就行了,如果有,你可能需要用其他方法來處理相關內容。舉個栗子:

    var imgArr = ["1.jpg","2.jpg","3jpg"]; //你想要在数组中的图片全部加载完然后转换成base64后再返回数据
    var canvas = document.createElement("canvas"),
        copyArr = imgArr.concat();
    
    var getB64Img = function(resultArr){
        resultArr = resultArr || [];
        var img = document.createElement('img'),
            url = copyArr.shift();
            
        if(!url) return resultArr;
        
        img.onload = function(){
            //这里通过canvas转64码
            resultArr.push(result); //保证了异步队列是排队实现
            getB64Img(resultArr);
        };
        
        img.src = url;
    };
    
    var resultArray = getB64Img(); //过程大概就这样
    

    回覆
    0
  • PHP中文网

    PHP中文网2017-05-19 10:11:36

    盆友,這個陣列的長度為1,Array[0]指的是索引值為0的陣列元素,也就是那裡的{src:"......"}。你說的函數執行完畢返歸指的是啥? setTimeout函數一般用來延時執行函數或表達式。

    回覆
    0
  • 取消回覆