承诺不在循环内返回

时间:2021-01-05 08:45:28

标签: javascript node.js promise

我有控制器和模型文件。我想将承诺的响应从模型返回到控制器。响应我的模型函数 conole.log(response) 给我我的结果,但我无法将其发送回控制器函数。

我的控制器功能是

let filters;
 for(var i = 0; i < 10; i++){
 filters = await ModelFile.getProductOptions(i);
 console.log(filters); // undefined
}

我的模型函数是

    getProductOptions = (product_id) => {
      connection.query(query1,function(err,rows) {
        var response = [];
        //doing something with rows
        Promise.all(rows.map(function(item) {
            var promise = new Promise(function(resolve,reject) {
                connection.query(queryItem,function(err,rows) {
                    //doing something
                    result = rows[0].field;
                    //and want to push it to an array
                    resolve(result);
                });
            });
            return promise.then(function(result) {
                console.log(result); //ok
                response.push(result) //ok
            });
        }).then(function () {
            console.log(response); //ok console is showing the response but when return response it gives undefined in controller function
        });
    });
}

1 个答案:

答案 0 :(得分:-1)

    getProductOptions = (product_id) => {
      connection.query(query1,function(err,rows) {
        var response = [];
        //doing something with rows
        Promise.all(rows.map(function(item) {
            var promise = new Promise(function(resolve,reject) {
                connection.query(queryItem,function(err,rows) {
                    //doing something
                    result = rows[0].field;
                    //and want to push it to an array
                    resolve(result);
                });
            });
            return promise.then(function(result) {
                console.log(result); //ok
                response.push(result) //ok
            });
        }).then(function () {
            return response;
        });
    });
}

在控制器中试试这个:

let filters;
 for(var i = 0; i < 10; i++){
 ModelFile.getResult(i).then(res => {
  console.log(res);
  filters = res;
 });
 console.log(filters);
}