known-issue.md 2.2 KB
Newer Older
雪洛's avatar
雪洛 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
## 数据库@db

### 日期对象@date-obj

#### 腾讯云和阿里云云函数的差异

腾讯云和阿里云在日期处理方面的差异主要体现在对ISOString格式的日期字符串(例:`2022-07-01T02:50:11.142Z`)入库时。腾讯云在入库时不会进行特殊处理,会以字符串形式存储此字符串,阿里云会将此格式字符串转为日期对象存储。以下代码比较容易理解此问题

```js
// 云函数代码
'use strict';
const db = uniCloud.database()
function getType(val) {
  return Object.prototype.toString.call(val).slice(8, -1).toLowerCase()
}
exports.main = async (event, context) => {
  const addRes = await db.collection('date-test').add({
    dateStr: '2022-07-01T02:50:11.142Z',
    dateObj: new Date()
  })
  const getRes = await db.collection('date-test').doc(addRes.id).get()
  const {
    dateStr,
    dateObj
  } = getRes.data[0]
  console.log(getType(dateStr)) // 腾讯云:string,阿里云:date
  console.log(getType(dateObj)) // 腾讯云:date,阿里云:date
  return {}
};
```

#### 腾讯云和阿里云web控制台的差异

同为日期对象,在web控制台腾讯云和阿里云展示的格式并不一致。以上述代码中的dateObj字段为例

腾讯云会展示为如下格式:

```js
{
	"dateObj": {
		"$date":1656424298294
	}
}
```

阿里云会展示为如下格式:

```js
{
	"dateObj": "2022-07-01T03:17:39.226Z" // 阿里云在web控制台展示为字符串,但实际底层存储的是日期对象
}
```

#### clientDB

clientDB在存储日期字符串及日期对象时和使用的云厂商表现一致。但是在取出日期对象时会得到ISOString格式的字符串

```js
// 客户端代码
const db = uniCloud.database()
async function test() {
	const getRes = await db.collection('date-test').get()
	const dateObj = getRes.result.data[0].dateObj // "2022-07-01T03:17:39.226Z"
}

test()
```


## 云函数@cloudfunction

### 异步行为@async-process

阿里云、腾讯云nodejs8在云函数return之后其余逻辑会被冻结不再执行。腾讯云nodejs12表现恰好相反,云函数return之后还会等待其余逻辑执行后才会将此云函数实例空闲出来。详情见:[keepRunningAfterReturn](uniCloud/cf-functions.md?id=keep-running)