2013-12-17 1 views
3

В настоящее время я пытаюсь понять, как реорганизовать мой код для использования обещаний/библиотеки Q.Как реорганизовать «обратную пирамиду» в версию на основе обещания

Рассмотрим следующий общий базовый пример: у меня есть тестовый файл, который дважды импортирует один и тот же файл в mongodb, а затем проверяет, получил ли имя набора данных для второго импорта некоторый модификатор в конце.

importDataSet('myFile.csv',function() { 
    importDataSet('myFile.csv',function() { 
    DataSet.find({title: 1}, function (err, result) { 
     result.length.should.be.equal(2); 
     result[0].title.should.startWith('myFile'); 
     result[1].title.should.startWith('myFile'); 
     result[0].title.should.not.be.equal(result[0].title); 
     done(); 
     }); 
    }); 
    }); 
    done(); 
}); 

(сделано() является завершающим обратным вызовом):

Так как я бы это сделать с помощью обещаний? Предпочтительно, не меняя сигнатуры функций (я следовал за соглашением, чтобы иметь обратные вызовы в качестве последнего параметра).

ответ

1

Я не знаю, почему done() вызывается дважды в коде, но без этого, он может выглядеть:

importDataSet('myFile.csv') 
    .then(function() { 
    return importDataSet('myFile.csv') 
}).then(function() { 
    return DataSet.find({title: 1}) 
}).then(function (result) { 
    result.length.should.be.equal(2); 
    result[0].title.should.startWith('myFile'); 
    result[1].title.should.startWith('myFile'); 
    result[0].title.should.not.be.equal(result[0].title); 
    done(); 
}); 
+0

Спасибо :) Действительно, вызов делается дважды была ошибка копирования и вставки из меня. –

+0

Я думаю, что вообще нецелесообразно редактировать принятые ответы. Можем ли мы установить правильность редактирования. – Strawberry

Смежные вопросы