Oma*_*mar -1 javascript node.js typescript
在以下示例中,get_bc_templates()返回 before get_bc_template()。
async get_bc_templates(mfpns, cnetDB, cb) {
const templates = await Promise.all([mfpns.map(async item => await this.get_bc_template(item, cnetDB))]);
if (cb) {
console.log(`prints immediately. before get_bc_template`.green.bold, templates)
return cb(200, templates.map(template => template.bigCommerce_object))
}
}
async get_bc_template(mfpn, cnetDB, cb ?) {
console.log('this logs after the get_bc_templates already returns', mfpn);
let collective_product = {
CNET_data: promised_data[1],
JAX_data: JAX_data,
suggested_retail: await this.calc_suggested_retail(JAX_data),
}
return collective_product;
}
Run Code Online (Sandbox Code Playgroud)
我需要帮助重写它,因此get_bc_templates返回一个数组get_bc_template() => collective_product(get_bc_template() 一次很好用)。
Promise.all 需要一个数组作为参数,你传递的是一个数组的数组:
[mfpns.map(async item => await this.get_bc_template(item, cnetDB))]
map 函数已经返回一个数组。所以,你所拥有的是一个数组中的一系列承诺:Promise.all([[promise, anotherPromise, ...]])
因此Promise.all将尝试只等待数组,而不是里面的承诺。
您应该删除map函数周围的数组括号:
const templates = await Promise.all(mfpns.map(async item => await this.get_bc_template(item, cnetDB)));
Run Code Online (Sandbox Code Playgroud)