私はいくつかの既存のコードをさらに約束して拡張しようとしていますが、現時点で私にとっては新しい話題です。これはnpmのビルドスクリプトの一部として実行されています。約束を得ることができず、その後の約束が呼び出されない
私は現在、最終的に各パックの操作が各アーキテクチャで行われた後に呼び出されるようにしようとしています。私は
return new Promise
しかし、私は最後に解決呼び出しに含めるべきかわからないので、私は、その関数から何かを返すわけではない現時点では、それを包む試してみました。本当に何も起こらずに解決策を呼び出すだけで、それを約束してラップすると、関数は実際には実行されず、どこにもエラーがキャッチされないようです。
私はこれについて完全に間違っていると思っています。達成したいのは、以前のものが完了したら別の機能を実行することです。
ここにコードがあります。それは、私が呼び出すことができない追加のものです。
function build(cfg) {
return new Promise((resolve, reject) => {
webpack(cfg, (err, stats) => {
if (err) return reject(err);
resolve(stats);
});
});
}
function startPack() {
console.log('start pack...');
build(electronCfg)
.then(() => build(cfg))
.then(() => del('release'))
.then(paths => {
if (shouldBuildAll) {
// build for all platforms
const archs = ['ia32', 'x64'];
const platforms = ['linux', 'win32', 'darwin'];
platforms.forEach(plat => {
archs.forEach(arch => {
pack(plat, arch, log(plat, arch));
});
});
} else {
// build for current platform only
pack(os.platform(), os.arch(), log(os.platform(), os.arch()));
}
})
.then(() => {
console.log('then!');
})
.catch(err => {
console.error(err);
});
}
function pack(plat, arch, cb) {
// there is no darwin ia32 electron
if (plat === 'darwin' && arch === 'ia32') return;
const iconObj = {
icon: DEFAULT_OPTS.icon + (() => {
let extension = '.png';
if (plat === 'darwin') {
extension = '.icns';
} else if (plat === 'win32') {
extension = '.ico';
}
return extension;
})()
};
const opts = Object.assign({}, DEFAULT_OPTS, iconObj, {
platform: plat,
arch,
prune: true,
'app-version': pkg.version || DEFAULT_OPTS.version,
out: `release/${plat}-${arch}`,
'osx-sign': true
});
packager(opts, cb);
}
'cfg'は、未定義の変数がここにある' .then(()= >ビルド(cfg)) 'と厳密なモードで拒否を引き起こす必要があります。それは 'then((cfg)=> build(cfg)')でなければなりません。それは意味があるかもしれないし、意味を持たないかもしれません。 'webpack'がそれ自身の結果で2回呼び出されることになっているともう一つの質問です。 – estus
すばやい返信をありがとう、cfgはファイルの上に定義されています。これは正しく実行されているので、私は何が起こることができないのですか? –
このコードで何も問題はありません。 2番目の '.then'は非同期(約束を返さない)ではないので、書かれているようにこのコードを拡張するために別の' .then 'は必要ありません。あなたの前提を再確認することをお勧めします。 – jib