2017-02-07 4 views
0

Привет Я пытаюсь понять, что не так с кодом ниже.Bluebird каждая функция бросает TypeError

Код:

const Promise = require('bluebird') 
    const fs = Promise.promisifyAll(require("fs")); 

    var config = { 
     "files": [{ 
     "path1": "bla.js", 
     "path2": "bla.js" 
     }] 
    } 
    var baseDir ='./' 
    function validateConfig(config) { 
     return Promise.each(config.files, (file) => 
     Promise.each([file.path1, file.path2], (path) =>{ 
      fs.statAsync(baseDir+ path) 
      console.log(baseDir + path) 
     } 

     ) 
    ) 
    } 

validateConfig(config).then(config => validateConfig(config)) 

Я понятия не имею, почему это происходит? Было бы хорошо, если бы кто-нибудь мог это объяснить.

TypeError: expecting an array or an iterable object but got [object Null]] 

Edit: Я создал отдельный продукт пример, который показывает эту проблему. ошибка происходит в последней строке

validateConfig(config).then(config => validateConfig(config))

Это просто пример. обычно я бы назвал еще один метод в .then()

+0

ли дать линию numnber? Ваш текущий фрагмент не компилируется –

+0

Нет простыни. Я попытаюсь создать исполняемый пример. –

+0

Для правильной работы 'config.files' должен быть массив объектов, в которых у объектов были свойства' .path1' и '.path2'. Сообщение об ошибке заставляет меня думать, что это не так. Пожалуйста, покажите нам, что такое 'config.files'. Например, выполните 'console.log (JSON.stringify (config.files)); и покажите нам, что это такое. – jfriend00

ответ

0

вашего вопроса с этой

.then(config => validateConfig(config)); 

Он зовут обратно в validateConfig с каким-то config объекта, который не выглядит так же, как сопзЬ вы дали его в первое место.

Я решил проблему так:

const Promise = require('bluebird') 
const fs = Promise.promisifyAll(require("fs")); 

const config = { 
    "files": [{ 
     "path1": "bla.js", 
     "path2": "bla.js" 
    }] 
}; 

const baseDir = './'; 

function validateConfig(config) { 
    return Promise.all(
     config.files 
      .reduce((fileList, file) => fileList.concat([file.path1, file.path2]), []) // this just gives you a list of files 
      .map(path => fs.statAsync(baseDir + path)) // this returns the promises of stat'ing each file 
    ) 
    .catch(err => { 
     console.log(err); 
    }); 
} 

validateConfig(config) 
    .then(statFiles => console.log(statFiles)); 

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

  • Нет связанных вопросов^_^