我有这个异步功能,应该在插入后记录返回的数据库记录。相反,节点会尝试在异步await
函数从API返回数据之前记录该记录。
fn: async function(inputs) {
let companyId = await tg.getCompanyIdByEmail(inputs.orderData.email)
let newCompany = {};
if (!companyId) {
newCompany = await tg.createCompany(inputs.orderData)
sails.log('new company id: ' + newCompany.id) // this line being called before await finishes above and throwing undefined error
}
return;
},
这是异步功能tg.createCompany()
async createCompany(orderData) {
const companyType = orderData.business_name === "" ? 'consumer' : 'business';
const companyName = companyType === 'consumer' ? `${orderData.first_name} ${orderData.last_name}` : orderData.company_name;
let company = {
company_type: companyType,
name: companyName,
email: orderData.email
}
request({
method: 'POST',
url: `${this.baseUrl}/companies/`,
headers: this.headers,
json: company
}, (err, res, body) => {
if (err) throw new Error('request error: ' + err);
if (!body.company) throw new Error('API error: ' + body.message)
sails.log('tg company created', body.company) //this is logging AFTER other function errors out as undefined
return body.company;
})
}
如何让该函数等待异步函数返回数据?
答案 0 :(得分:1)
createCompany
需要创建一个承诺并将其兑现。例如:
const createCompany = (orderData) => {
return new Promise((resolve, reject) => {
// ...
// your existing code goes here.
// Then inside the callback from request, call reject(err) on err,
// and call resolve() when the result is good, i.e:
// ...
resolve(body.promise)
})
}
现在您可以在createCompany上“等待”。