在返回给用户之前等待回调完成
Wait for Callbacks to complete before returning to the user
我有一个动态案例,用户将 post 一组数据,我需要将这些数据插入数据库的不同行中。在向用户返回成功或失败之前,我如何等待回调完成。
我尝试使用 promise 但它 returns 这个
UnhandledPromiseRejectionWarning: Unhandled promise rejection
(rejection id: 2): TypeError: Cannot read property
'Symbol(Symbol.iterator)' of undefined (node:6216) DeprecationWarning:
Unhandled promise rejections are deprecated. In the future, promise
rejections that are not handled will terminate the Node.js process
with a non-zero exit code.
我的足迹与承诺
req.targetting.forEach(data => {
let s = {};
if (data.value == '' || data.value.length == 0) {
s = 99;
} else {
s = data.status;
}
let promises = new Promise((resolve, reject) => {
XXX.upsertWithWhere(where clause,data, (err, data) => { // a loopback method
if (err) {
return reject(err);
}
return resolve(data);
});
});
Promise.all(promises).then((err, data) => {
if (err) {
return callback(err);
}
callback(null, data);
});
});
};
我考虑过将 promises 放在一边,但仍然出现与拒绝 ID 3 相同的错误
upsert 方法的签名
PersistedModel.upsertWithWhere([where], data, callback)
我想这样的事情应该没问题(我没有测试这段代码)
let promises = [];
req.targetting.forEach(data => {
let s = {};
if (data.value == '' || data.value.length == 0) {
s = 99;
} else {
s = data.status;
}
let promise = new Promise((resolve, reject) => {
XXX.upsertWithWhere(whereclause,data, (err, data) => { // a loopback
//method
if (err) {
return reject(err);
}
return resolve(data);
});
});
promises.push(promise);
});
Promise.all(promises).then((data) => {
return data;
})
.catch((err) => {
return err;
});
您需要用另一种方法包装您的迭代。建立一个承诺列表,然后等待它解决。例如下面
function orgMethod(){
let promises =[];
req.targetting.forEach(data => {
let s = {};
if (data.value == '' || data.value.length == 0) {
s = 99;
} else {
s = data.status;
}
promises.push(new Promise((resolve, reject) => {
XXX.upsertWithWhere(where clause,data, (err, data) => { // a loopback method
if (err) {
return reject(err);
}
return resolve(data);
});
}));
});
};
Promise.all(promises).then((err, data) => {
if (err) {
return callback(err);
}
callback(null, data);
});
}
我有一个动态案例,用户将 post 一组数据,我需要将这些数据插入数据库的不同行中。在向用户返回成功或失败之前,我如何等待回调完成。
我尝试使用 promise 但它 returns 这个
UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 2): TypeError: Cannot read property 'Symbol(Symbol.iterator)' of undefined (node:6216) DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
我的足迹与承诺
req.targetting.forEach(data => {
let s = {};
if (data.value == '' || data.value.length == 0) {
s = 99;
} else {
s = data.status;
}
let promises = new Promise((resolve, reject) => {
XXX.upsertWithWhere(where clause,data, (err, data) => { // a loopback method
if (err) {
return reject(err);
}
return resolve(data);
});
});
Promise.all(promises).then((err, data) => {
if (err) {
return callback(err);
}
callback(null, data);
});
});
};
我考虑过将 promises 放在一边,但仍然出现与拒绝 ID 3 相同的错误
upsert 方法的签名
PersistedModel.upsertWithWhere([where], data, callback)
我想这样的事情应该没问题(我没有测试这段代码)
let promises = [];
req.targetting.forEach(data => {
let s = {};
if (data.value == '' || data.value.length == 0) {
s = 99;
} else {
s = data.status;
}
let promise = new Promise((resolve, reject) => {
XXX.upsertWithWhere(whereclause,data, (err, data) => { // a loopback
//method
if (err) {
return reject(err);
}
return resolve(data);
});
});
promises.push(promise);
});
Promise.all(promises).then((data) => {
return data;
})
.catch((err) => {
return err;
});
您需要用另一种方法包装您的迭代。建立一个承诺列表,然后等待它解决。例如下面
function orgMethod(){
let promises =[];
req.targetting.forEach(data => {
let s = {};
if (data.value == '' || data.value.length == 0) {
s = 99;
} else {
s = data.status;
}
promises.push(new Promise((resolve, reject) => {
XXX.upsertWithWhere(where clause,data, (err, data) => { // a loopback method
if (err) {
return reject(err);
}
return resolve(data);
});
}));
});
};
Promise.all(promises).then((err, data) => {
if (err) {
return callback(err);
}
callback(null, data);
});
}