Hướng dẫn return list in javascript function - danh sách trả về trong hàm javascript

Tôi muốn viết chức năng này:

function getResults(nums){
    var results = [];
    for(var i = 0, len = nums.length; i < len; i++){
        var num = nums[i];
        ajaxGet("http://xxx.com/" + num, function(data){
            results.push(data);
        });
    }
    return results;
}    
var results = getResults([12, 22, 34]);

Như bạn có thể thấy, bởi vì

$.ajax({async: false});
var results = getResults();
$.ajax({async: true});
3 không đồng bộ, điều này sẽ không hoạt động. Làm thế nào tôi có thể làm điều này đúng cách?

hỏi ngày 22 tháng 1 năm 2012 lúc 5:09Jan 22, 2012 at 5:09

Hướng dẫn return list in javascript function - danh sách trả về trong hàm javascript

4

Bạn cũng có thể bảo Ajax chạy đồng bộ

$.ajax({async: false});
var results = getResults();
$.ajax({async: true});

Đã trả lời ngày 22 tháng 1 năm 2012 lúc 5:21Jan 22, 2012 at 5:21

JasonjasonJason

15.9k3 Huy hiệu vàng48 Huy hiệu bạc72 Huy hiệu đồng3 gold badges48 silver badges72 bronze badges

1

Bạn cần trả lại mảng bằng một cuộc gọi lại và gọi cuộc gọi lại khi bạn nhận được phản hồi cuối cùng. (Lưu ý rằng các câu trả lời sẽ không được nhận theo thứ tự)

function getResults(nums, callback) {
    var results = [];
    for(var i = 0, len = nums.length; i < len; i++){
        var num = nums[i];
        ajaxGet("http://xxx.com/" + num, function(data){
            results.push(data);
            if (results.length === nums.length)
                callback(results);
        });
    }
}    

Đã trả lời ngày 22 tháng 1 năm 2012 lúc 5:14Jan 22, 2012 at 5:14

SlaksslaksSLaks

851K174 Huy hiệu vàng1881 Huy hiệu bạc1949 Huy hiệu đồng174 gold badges1881 silver badges1949 bronze badges

Nếu bạn đang sử dụng jQuery, bạn có thể đặt cờ async thành false:

function getResults(nums){
    var results = [];
    for(var i = 0, len = nums.length; i < len; i++){
        var num = nums[i];
        jQuery.ajax({
            url: "http://xxx.com/" + num}, 
            async: flase,
            success: function(data){
                results.push(data);
            }
        });
    }
    return results;
}    
var results = getResults([12, 22, 34]);

Nhưng nếu bạn đang làm theo cách này thì cách tiếp cận của bạn là sai. Thay vào đó, hãy đi với câu trả lời của Slaks.

Trang API

$.ajax({async: false});
var results = getResults();
$.ajax({async: true});
4

Đã trả lời ngày 22 tháng 1 năm 2012 lúc 5:20Jan 22, 2012 at 5:20

QWERTYMKQWERTYMKqwertymk

33.2K28 Huy hiệu vàng119 Huy hiệu bạc183 Huy hiệu đồng28 gold badges119 silver badges183 bronze badges

var allresults;

function getResults(nums){
    var results = [];
    for(var i = 0, len = nums.length; i < len; i++){
        var num = nums[i];
        ajaxGet("http://xxx.com/" + num, function(data){
            results.push(data);
            if(results.length == nums.length){
                 resume(results);
            }
        });
    }

}

getResults([12, 22, 34]);

function resume(results){
   allresults =  results;
   ....
   ....
}     

Giống như những người khác đã nói, hãy sử dụng nếu bạn không sử dụng jQuery

Đã trả lời ngày 22 tháng 1 năm 2012 lúc 5:22Jan 22, 2012 at 5:22

Hướng dẫn return list in javascript function - danh sách trả về trong hàm javascript

DiodediodeDiode

Huy hiệu vàng 24K840 Huy hiệu bạc 50 Huy hiệu Đồng8 gold badges40 silver badges50 bronze badges

Tóm tắt: Trong hướng dẫn này, bạn sẽ học cách xác định các hàm JavaScript trả về nhiều giá trị.: in this tutorial, you will learn to define JavaScript functions that return multiple values.

Các hàm JavaScript có thể trả về một giá trị duy nhất. Để trả về nhiều giá trị từ một hàm, bạn có thể đóng gói các giá trị trả về dưới dạng các phần tử của một mảng hoặc là thuộc tính của một đối tượng.

Trả về nhiều giá trị từ một hàm bằng một mảng

Giả sử chức năng

$.ajax({async: false});
var results = getResults();
$.ajax({async: true});
5 sau đây lấy tên và tên cuối cùng từ cơ sở dữ liệu trong phần phụ trợ hoặc từ kết quả của cuộc gọi API của bên thứ ba và trả về chúng dưới dạng các phần tử của một mảng:

function getNames() { // get names from the database or API let firstName = 'John', lastName = 'Doe'; // return as an array return [firstName, lastName]; }

Code language: JavaScript (javascript)

Những điều sau đây cho thấy cách lấy giá trị trả về từ hàm

$.ajax({async: false});
var results = getResults();
$.ajax({async: true});
5:

let names = getNames();

Code language: JavaScript (javascript)

Vì biến

$.ajax({async: false});
var results = getResults();
$.ajax({async: true});
7 là một mảng, bạn có thể tham chiếu các phần tử của nó bằng dấu ngoặc vuông, như thế này:

const firstName = names[0], lastName = names[1];

Code language: JavaScript (javascript)

Trong ES6, bạn có thể sử dụng cú pháp phân công phá hủy để giải nén các giá trị khỏi một mảng bằng trực giác hơn, như thế này:

const [firstName, lastName] = getNames();

Code language: JavaScript (javascript)

Trong mã này, các biến

$.ajax({async: false});
var results = getResults();
$.ajax({async: true});
8 và
$.ajax({async: false});
var results = getResults();
$.ajax({async: true});
9 sẽ lấy các phần tử thứ nhất và thứ hai của mảng trả về.

Trả về nhiều giá trị từ một hàm bằng cách sử dụng một đối tượng

Nếu bạn muốn gán một tên cho mỗi giá trị được trả về để làm cho nó dễ đọc hơn và dễ bảo trì hơn, bạn có thể sử dụng một đối tượng:

function getNames() { // get names from the database or API let firstName = 'John', lastName = 'Doe'; // return values return { 'firstName': firstName, 'lastName': lastName }; }

Code language: JavaScript (javascript)

Vì tên của các thuộc tính giống như các biến, bạn có thể rút ngắn nó bằng cách sử dụng các phần mở rộng cú pháp theo nghĩa đen trong ES6 như sau:

$.ajax({async: false});
var results = getResults();
$.ajax({async: true});
0

Và bạn có thể nhận được giá trị trả về như một đối tượng như thế này:

$.ajax({async: false});
var results = getResults();
$.ajax({async: true});
1

Nếu bạn muốn giải nén các thuộc tính khỏi một đối tượng, bạn có thể sử dụng cú pháp phá hủy đối tượng như sau:

$.ajax({async: false});
var results = getResults();
$.ajax({async: true});
2

Bản tóm tắt

  • JavaScript không hỗ trợ các chức năng trả về nhiều giá trị. Tuy nhiên, bạn có thể bọc nhiều giá trị vào một mảng hoặc một đối tượng và trả về mảng hoặc đối tượng.
  • Sử dụng cú pháp gán phá hủy để giải nén các giá trị khỏi mảng hoặc thuộc tính từ các đối tượng.

Hướng dẫn này có hữu ích không?

Cái nào trả về danh sách các yếu tố trong JavaScript?

Nếu bạn muốn tìm tất cả các phần tử HTML có cùng tên lớp, hãy sử dụng getElsementsByClassName (). Ví dụ này trả về một danh sách tất cả các yếu tố có lớp = "giới thiệu".getElementsByClassName() . This example returns a list of all elements with class="intro" .

Hàm JavaScript có thể trả lại mảng không?

JavaScript không hỗ trợ các chức năng trả về nhiều giá trị.Tuy nhiên, bạn có thể bọc nhiều giá trị vào một mảng hoặc một đối tượng và trả về mảng hoặc đối tượng.Sử dụng cú pháp gán phá hủy để giải nén các giá trị khỏi mảng hoặc thuộc tính từ các đối tượng.. However, you can wrap multiple values into an array or an object and return the array or the object. Use destructuring assignment syntax to unpack values from the array, or properties from objects.

() => Có nghĩa là gì trong javascript?

Đây là một tính năng mới được giới thiệu trong ES6 và được gọi là hàm mũi tên.Phần bên trái biểu thị đầu vào của một hàm và phần bên phải đầu ra của hàm đó.arrow function. The left part denotes the input of a function and the right part the output of that function.

Chúng ta có thể trả về 2 giá trị từ một hàm trong JavaScript không?

Để trả về nhiều giá trị từ một hàm, chúng tôi không thể trả về chúng trực tiếp.Nhưng chúng ta có thể trả lại chúng dưới dạng mảng và đối tượng.Ví dụ 1: Ví dụ này trả về mảng [Hồi GFG_1 ,, GFG_2,] chứa nhiều giá trị.we can not directly return them. But we can return them in form of Array and Object. Example 1: This example returns the array [“GFG_1”, “GFG_2”] containing multiple values.