2016-02-03 1 views
0
var Tmp_Products = sequelize.define('tmp_products_list',{ 
    name : Sequelize.STRING, 
    is_crawled : Sequelize.BOOLEAN 
},{ 
    freezeTableName : true 
}); 

function get_tmp_products(){ 
    var ps = new Array(); 
    Tmp_Products.findAll({ 
     attributes : ['name'], 
     limit : 10 
    }).then(function(products){ 
     for(var p in products){ 
      console.log(products[p].name); //comment 1 
      ps[p] = products[p].name 
     } 
    }); 
    console.log('ps',ps) //comment 2 
    return ps 
} 

В месте «комментарий 1» показано много продуктов, но место «комментарий 2» показывает пустой массив.nodejs: как сделать «sequelize then» синхронным?

Я не хочу, чтобы он был асинхронным здесь, я хочу, чтобы функция окончательно вернула список продуктов, как мне это сделать?

+0

Почему вы хотите использовать асинхронный? Это не то, что у nodejs хорошо. – David

+0

Я хочу, чтобы он возвращал мне список продуктов, что является конечным результатом, я не хочу, чтобы он вызывал тогда() всюду в моем коде. – olivetree123

+0

Вы хотите использовать обратный вызов? – David

ответ

1

Я не мог изменить свою асинхронную природу. Упование это помогает

var Tmp_Products = sequelize.define('tmp_products_list',{ 
    name : Sequelize.STRING, 
    is_crawled : Sequelize.BOOLEAN 
},{ 
    freezeTableName : true 
}); 

function get_tmp_products(callback){ 
    var ps = new Array(); 
    Tmp_Products.findAll({ 
     attributes : ['name'], 
     limit : 10 
    }).then(function(products){ 
     //add something to check error 
     for(var p in products){ 
      console.log(products[p].name); //comment 1 
      ps[p] = products[p].name 
     } 
     console.log('ps',ps) //comment 2 
     callback(err, ps) 
    }); 
} 
+0

Что делает обратный вызов? если обратный вызов выглядит так: function callback (err, ps) {return ps}; Я думаю, что он вернет мне и пустой массив. Если обратный вызов пытается дать результат глобальной переменной, то я не думаю, что это хорошая работа. – olivetree123

+0

действительно? Он вызывается после того, как вы получите полный массив ps. – David

+0

Да, но когда я вызываю get_tmp_products(), я хочу получить результат прямо сейчас или заблокировать результат. Я не хочу проверять результат с помощью цикла. – olivetree123