我不确定Array.sort(callback)
是同步的还是异步的。但是我在以下代码片段中使用了updateddate
对日期(string
类型为await
类型存储在数据库中)进行了排序。我是否需要为Array.sort(callback)
包括data.sort
以确保仅在数组排序完成后才执行其余代码。在同步代码上方使用排序是否正确?我是否应该在modify_data(data,likesData){
data.sort(function(a,b){
return new Date(b.updateddate) - new Date(a.updateddate);
})
var nomination_group_id = _.groupBy(data,"submissionid")
var likes_group
var refined_arr = [];
var likesData = likesData
_.each(nomination_group_id,function(eachObj){
var mapObj = new Map()
mapObj.set('category',eachObj[0] ? eachObj[0].question : " ")
mapObj.set('submitter',eachObj[0] ? eachObj[0].email : " ")
refined_arr.push([ ...mapObj.values() ])
})
return refined_arr
}
的回调中编写其余代码?
getWords
答案 0 :(得分:4)
我不确定Array.sort(callback)是同步的还是异步的
Array.sort(sortFunction)
参数sortFunction
同步应用于数组的每个元素。另外,Javascript是单线程的。
const names = ['adelaine','ben', 'diana', 'carl']
const namesSortedAlphabetically = names.sort() // default is alphabetical sort
console.log('ALPHA SORT', namesSortedAlphabetically)
const namesSortedByLength = names.sort((a, b) => a.length > b.length) // custom sort
console.log('CUSTOM SORT', namesSortedByLength)
我需要包括等待Array.sort(callback)
不会,因为Array.sort
是同步的,并且不会返回Promise
。
答案 1 :(得分:3)
这是安全且同步的,因为它不是回调,它只是一个比较器(比较功能)see here
它不是在做某事的最后调用此函数,而是在使用该函数。希望它能使
答案 2 :(得分:2)
是同步的。回调本身并不意味着所有者函数是异步的。 回调仅用于确定排序方式。因此,您可以安全地将下一个逻辑置于回调之外。
答案 3 :(得分:0)
.sort()
是JavaScript语言的功能,并且由ECMAScript规范确定为同步。
(默认情况下,node.js框架的功能通常是异步的,但是.sort()
来自JavaScript语言本身,而不是来自node.js框架。)
涉及任何生产级应用程序时,很可能要异步使用。您可以:
是的,您需要注意,要执行排序的代码需要在排序后执行。如果您在之前的3个选项中选择了第一个选项, ,您可以:
.then()
await
关键字。请注意,我不想将您与如此众多的解决方案混淆,但是有必要注意它们。随着时间的推移,它们将成为第二自然。 如果这时所有这些都让您感到困惑,我建议您从包裹在异步函数周围并与.sort()
函数链接在一起的基本.then()
开始。
如上所述,.sort()
本身不接受回调函数,而是接受排序函数。那是对的。为了异步使用.sort()
,您必须按照我的建议将其包装在自己的异步函数中。
答案 4 :(得分:0)
修改输入不是一个好主意,您不需要await
来确保data.sort
是同步的,只需声明一个新变量即可保存排序结果,如:
var sorted_data = data.sort(function(a,b){
return new Date(b.updateddate) - new Date(a.updateddate);
})
var nomination_group_id = _.groupBy(sorted_data, "submissionid")