成功执行所有删除操作时返回布尔值 (true | false)

Posted

技术标签:

【中文标题】成功执行所有删除操作时返回布尔值 (true | false)【英文标题】:Return boolean (true | false) value when all delete operations are successfully performed 【发布时间】:2018-03-24 20:50:32 【问题描述】:

我正在使用 Sequelize、GraphQL 和 Typescript 来编写代码。 我有两个表 RecordInformation 和 OtherDescription。 RecordInformation 在 OtherDescription 表上有一个外键“OtherID”。

我的解析器文件中有以下两个代码。我可以使用 sequelize 中的级联选项删除记录。

但是,我想知道如何根据每个操作是否成功执行来更改此代码以仅返回 true 或 false 值。目前map操作的返回类型为Bluebird[]。我想在删除突变后返回布尔值。

interface IRecordInformation 
    id: number;
    RecordID: number;
    LabelOptionID: number;
    OtherID: number;


interface IListRecordInformation 
    RecordInformationList: IRecordInformation[];


deleteRecordInformation(_: null, args: IListRecordInformation) 
  const recordInformationList = args.RecordInformationList;
  return recordInformationList.map((recordInfo) => OtherDescription.destroy(
    where:  id: recordInfo.OtherID 
  ));
,

【问题讨论】:

您可以使用.every()OtherDescription.destroy( where: id: recordInfo.OtherID ) 是否返回 Boolean 不,它返回一个数字,即影响的行数 布尔转数字的逻辑是什么?或者您想确定.map() 何时完成? 我尝试添加此代码: deleteRecordInformation(_: null, args: IListRecordInformation) const recordInformationList = args.RecordInformationList; return recordInformationList.map((recordInfo) => OtherDescription.destroy( where: id: recordInfo.OtherID )).every(number => number > 0); ,但它给出了 operator > 不能应用于 Bluebird 的错误 OtherDescription.destroy( where: id: recordInfo.OtherID ) 是否返回 Promise 【参考方案1】:

您可以使用Promise.all() 传递recordInformationList,然后使用.every() 链接.then() 来检查返回的Promise

Promise.all(
  recordInformationList.map(recordInfo => 
    OtherDescription.destroy(
      where:  id: recordInfo.OtherID 
    )
  )
)
.then(values => values.every(n => n > 0))
.then(bool => bool);

【讨论】:

以上是关于成功执行所有删除操作时返回布尔值 (true | false)的主要内容,如果未能解决你的问题,请参考以下文章

从列表中删除布尔值[重复]

对JavaScript的一些笔记

(14)awk布尔值比较和逻辑运算

ES6基础之——new Set

js----delete关键字

在 C# 中对布尔值使用 &=