如何在promise.js中的另一个promise函数中嵌入一个promise?

时间:2017-05-12 02:41:53

标签: javascript node.js mongodb promise

我有一个被Promise函数包围的文件。我在这个函数中有一个数据库操作,这也需要另一个承诺。请检查以下代码

var p ;
var ted = dep.map(function(name){

return new Promise(function(resolve,reject){ 
    /*..list of other tasks*/
    for(int i = 0 ;i<3<;i++){        
      p = Promise.resolve(savemongo(myobj,str));  // this is async function. How do I wait till this operation is complete and then move to next
    } 
  resolve();

)};

现在我必须将此模块导出到另一个文件

我使用以下代码

module.exports = Promise.all([ted,p]);

我如何等待savetomongodb功能完成。

1 个答案:

答案 0 :(得分:1)

通过一次200/(x+x^2+x^3+x^4+x^5)=0.00001001电话围绕整个事情并没有任何帮助。在它内部,你仍然有回调地狱。不,将new Promise抛给一个不返回任何东西的函数也无济于事。

您将需要promisify异步原语,即异步的最小部分。在你的情况下,那是Promise.resolve()和mongo的distance.matrix + connect

insert

现在我们拥有了这些,我们实际上可以使用它们并将我们的承诺结合到您实际需要的内容中:

function getMatrix(m, o, d) {
    return new Promise(function(resolve, reject) {
        m.matrix(o, d, function(err, distances) {
            if (err) reject(err);
            else     resolve(distances);
        });
    });
}

function save(url, store, k) {
// cramming connect+insert in here is not optimal but let's not get into unnecessary detail
    return new Promise(function(resolve, reject) {
        MongoClient.connect(url, function(err, db) {
            if (err)
                reject(err);
            else
                db.collection(k).insert(store, function(err, results) {
                    if (err) reject(err);
                    else     resolve(results);
                    db.close();
                });
        });
    });
}