2016-05-15 5 views
0

В NodeJS Я обертываю функцию обещания для возврата статической переменной. Я уверен, что есть лучший способ, но я не смог найти его на Q's docs. Это работает, однако Q.Promise кажется излишним:Возвращение статического значения в качестве обещания

function parseXML(filepath) { 
    return Q.Promise(function (resolve, reject, notify) { 

     readXML(filepath).then(function (xml) { 

     ... (long synchronised code)... 

     //console.log('products -> ', products); 
     resolve(products); 

    }).catch(function (err) { 
     reject(err); 
    }); 
}); 
} 

В Угловом я хотел бы использовать $ q.when, но в библиотеке Q «когда» кажется, есть другая роль, как я понимаю. Я, конечно, пропустил какой-то метод «когда». Это то, что я хотел бы быть в состоянии сделать:

function parseXML(filepath) { 
    readXML(filepath).then(function (xml) { 

     ... 

     // some Q method to create a fulfilled promise 
     Q.???(products); 

    }); 

} 
+0

Вы должны 'вернуть ReadXml (Filepath)' из 'ParseXML '. Как только функция использует обещание, это становится обещанием (пока вы возвращаете обещание изнутри), и в вашем случае 'parseXML' тогда станет' thenable' – Wainage

+0

Но мне нужно создать Q.Promise, как в первом примере или есть способ вернуть переменную «products» без упаковки метода с Q.Promise? – Guy

+0

№ После того, как вы пообещаете/асинхронно, вы не можете синхронизировать. Попытка закончится слезами. Я могу изложить ваш пример в ответе, если это не ясно. – Wainage

ответ

1

Оба, в угловых и Node, это должно быть достаточно:

function parseXML(filepath) { 
    return readXML(filepath).then(function(xml) { 
     ... (long synchronised code)... 
     return products 
    }); 
}