首页 文章

等待回调完成后再返回给用户

提问于
浏览
0

我有一个动态的情况,用户将发布一个数据数组,我需要在不同的行中插入数据库 . 如何在将成功或失败返回给用户之前等待回叫完成 .

我尝试使用promise,但它返回了这个

UnhandledPromiseRejectionWarning:未处理的承诺拒绝(拒绝ID:2):TypeError:无法读取未定义的属性'Symbol(Symbol.iterator)'(节点:6216)弃用警告:不推荐使用未处理的承诺拒绝 . 将来,未处理的承诺拒绝将使用非零退出代码终止Node.js进程 .

我的承诺

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);
      });
    });
  };

我想把承诺放在一边,但仍然与拒绝ID 3相同的错误

upsert方法的签名

PersistedModel.upsertWithWhere([where], data, callback)

2 回答

  • 1

    我觉得这样的事情应该没问题(我没有测试过这段代码)

    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;
    });
    
  • 1

    您需要将迭代包装在另一个方法中 . Build 承诺列表,然后等待它解决 . 如下

    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);
                      });
            }
    

相关问题