2015-04-09 2 views
0

У меня есть функция, которая создает объект на основе данных db, а также некоторый javascript на основе web_based.Node.js возвращает основной цикл изнутри обратного вызова

function makeObject(dbdata){ 

    var obj = {}; 
    obj.id = dbdata.id; 
    obj.url = dbdata.url; 

    request(dbdata.url,function(err,res,body){ 
     obj.inventory = JSON.parse(body).inventory; 
    }); 

    return obj 
} 

Это, очевидно, не заполняет свойство инвентаря (асинхронный и т.д. ...) и не работает с возвращением внутри запроса. Я знаю, что ответ довольно простой, но я просто не вижу его. Помоги пожалуйста!

ответ

1

Вы можете либо передать аргумент обратного вызова, либо вернуть обещание. request должен вернуть обещание, или вы должны каким-то образом его обещать. Решение обратного вызова легче продвигаться вперед.

function makeObject(dbdata, cb) { 
    /* your codes */ 
    request(args, function (err, res, body) { 
     obj.inventory = JSON.parse(body).inventory; 
     cb(err, obj); 
    }); 
} 

Тогда вы будете использовать его как так

makeObject(dbdata, function (err, obj) { 
    // handle err 

    // do things with obj 
}); 
Смежные вопросы