私は現在、いくつかのコールバック地獄でビルドプロセスを約束地獄に変えています(私は約束の新しさと私のブルーバードの経験がないためです)。私はファイルが既に存在するというエラーで.all
メソッドを抜け出すのに苦労しています。ファイル内のファイルコピーが、開始時にrimraf
より前に実行されている可能性がありますか?興味がある人々のためにコールバックhellを使って地獄を約束してビルドを変換する
const Promise = require('bluebird');
const rcopyAsync = Promise.promisify(require('recursive-copy'));
const readAsync = Promise.promisify(require('recursive-readdir'));
const rmrfAsync = Promise.promisify(require('rimraf'));
const globAsync = Promise.promisify(require('glob'));
rmrfAsync('{build,dist}')
.then(() => {
return readAsync('src');
})
.then((files) => {
if (!files.length) {
return Promise.reject(new Error('No source to compile.'));
}
return Promise.resolve(true);
})
.all([
rcopyAsync(`${__dirname}/scripting`, 'build'),
rcopyAsync(`${__dirname}/compiler/${process.platform}`, 'build'),
rcopyAsync('src/scripting', 'build')
])
.then(() => {
return globAsync('*.sma', { cwd: 'build' });
})
.then((files) => {
console.log(files);
})
.catch(err => {
throw err;
});
、コールバック地獄の作業部分は以下の通りです:
...
rmrf('{build,dist}', err => {
if (err) throw err;
read('src', (err, files) => {
if (err) throw err;
if (!files.length) return;
rcopy(`${__dirname}/scripting`, 'build', err => {
if (err) throw err;
rcopy(`${__dirname}/compiler/${process.platform}`, 'build', err => {
if (err) throw err;
rcopy('src/scripting', 'build', err => {
if (err) throw err;
glob('*.sma', { cwd: 'build' }, (err, files) => {
if (err) throw err;
console.log(files);
});
});
});
});
});
});
'返しPromise.resolve(真)でなければなりません;'表示されません。必要とされる。 – jfriend00
私はもともとソースをC&Pしています。私は少しそれをきれいにした。 – Strikeskids
優れた説明。人に魚を教える。 – tenub