所以 Promise.all 将数组作为值传递给函数,我更愿意将数组值作为参数传递。
假设我有这个功能:
function printData(a,b,c){
console.log(a,b,c)
}
Run Code Online (Sandbox Code Playgroud)
我想
Promise.all([1,2,3]).then(printData)
>> [1,2,3] undefined undefined
Run Code Online (Sandbox Code Playgroud)
改为打印这个
>> 1 2 3
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来做到这一点:
Promise.all([1,2,3,4]).then(function(values){printData.apply(null, values)})
Run Code Online (Sandbox Code Playgroud)
使用扩展运算符?
我也试过
Promise.all([1,2,3]).then(printData.apply)
Run Code Online (Sandbox Code Playgroud)
但它返回一个错误
所以只是关于数组如何在java脚本中工作的问题,这里有一些行为;
var a = [1,2,3,4]
Object.keys(a)
>> ['0','1','2','3']
a['0']
>> 1
a.length
>> 4
a.something = 'value'
a
>> [1,2,3,4]
console.log(a)
>> [1, 2, 3, 4, something: "value"]
Object.keys(a)
>> ['0','1','2','3','something']
a.something
>> 'value'
a.length
>> 4
a.length = 5
a
>>[1, 2, 3, 4, undefined]
console.log(a)
>>[1, 2, 3, 4, something: "value"]
Object.keys(a)
>> ["0", "1", "2", "3", "something"]
a.length = 'len'
> Uncaught RangeError: Invalid array length(…)
Run Code Online (Sandbox Code Playgroud)
我的问题是,为什么'length'不会显示为数组对象中的键?它几乎像on一样,虽然它似乎被解析为int.如果它不是功能或关键,它是什么?
我想看看我的网站如何应对缓慢的连接.
有没有办法限制快递以慢速或延迟响应?我知道我可以setTimeout在路径上实现调用,但静态资产呢?
我正在按照此示例为测试创建模拟响应。
稍微修改一下,它看起来像这样:
var data = { foo: 'bar'};
var blob = new Blob([JSON.stringify(data)], {type : 'application/json'});
var init = { "status" : 200 , "statusText" : "SuperSmashingGreat!" };
var resp = new Response(blob,init);
console.log(resp.url)
body: (...)
bodyUsed: true
headers: Headers {}
ok: true
redirected: false
status: 200
statusText: "SuperSmashingGreat!"
type: "default"
url: ""
Run Code Online (Sandbox Code Playgroud)
这在模拟数据和状态方面做得很好,但是,我也想模拟resp.url我不知道如何使用构造函数来设置它,并且[因为它是只读的]我无法在 resp 本身上设置它
resp.url
>> ""
resp.url = 'www.test.com'
>> "www.test.com"
resp.url
>> ""
Run Code Online (Sandbox Code Playgroud)
那么如何设置url呢?
假设我有这种类型:
type FooArray = IFoo[] | number[] | undefined
是否可以从中提取IFoo?
假设你有两个具有相当数量嵌套的对象......
const objA = {
one: {
a: 10,
b: 'string1',
c: {
d: 10
}
},
two : 'string1'
}
const objB = {
one: {
a: 20,
b: 'string2',
c: {
d: 20
}
},
two : 'string2'
}
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法来检查它们之间的所有键是否匹配?
*匹配:两个对象在同一嵌套位置具有相同的键,没有额外的键,所以objA和objB匹配
我们有一个内部网络,该网络通过vpn连接连接到vpc。我们仅使用私有IP进行访问,而VPC具有用于实例访问Internet的NAT。我们尝试在实例上不要有任何公共IP。
我喜欢部署到beantalk的简易性,因此,我一直在非常努力地将其用作单实例而不是负载平衡。
但是,无论我做什么,都迫使我拥有一个公共dns和公共弹性IP,即使您取消单击“关联公共IP地址”,更糟糕的是,它甚至不让我手动取消关联,只是继续添加它。
无论如何,是否只能在您的VPC内使用beantalk而不提供公共地址?如果否,为什么不呢?
有些地方我将数组更改为像对象这样的数组:
let arr = ['a','b']
let arrLike = {...arr, length: arr.length}
console.log(arrLike)
> {0: "a", 1: "b", length: 2}
Run Code Online (Sandbox Code Playgroud)
它并不完美,但这允许我通过使用合并来覆盖数组.即:
> let a1 = [1,2,3], b1 = [1,2,3]
> Object.assign(a1, arr)
[ 'a', 'b', 3 ]
> Object.assign(b1, arrLike)
[ 'a', 'b']
Run Code Online (Sandbox Code Playgroud)
这是可取的,但我也想让concat工作,
['z'].concat(arr)
> ["z", "a", "b"] // good
['z'].concat(arrLike)
> ["z", {0: "a", 1: "b" length: 2}] // bad
Run Code Online (Sandbox Code Playgroud)
无论如何要修改arrLikeconcat会起作用吗?
我有一个我希望扩展的类型,但是我对它的唯一引用将其定义为
type Foo = TypeIamInterestedIn | null
这是strictNullChecks在.
这是一个tsPlayground示例:
type Test1 = { name: string }
type Test2 = { name: string } | null
interface ExtendedTest1 extends Test1 {
date: number
}
interface ExtendedTest2 extends Test2 { // type error an interface may only extend a class or another interface
date: number
}
Run Code Online (Sandbox Code Playgroud)
反正只是选择非null类型来扩展吗?
最简单的例子
假设这种类型
type Foo = { a: number } | { b: string } | { c: boolean };
Run Code Online (Sandbox Code Playgroud)
是否有可能得到
type KeysOfFoo = 'a' | 'b' | 'c';
Run Code Online (Sandbox Code Playgroud)
我试过了,但没用
type Failed = keyof Foo; // never
Run Code Online (Sandbox Code Playgroud)
javascript ×6
typescript ×3
arrays ×2
ecmascript-6 ×2
amazon-ec2 ×1
express ×1
fetch ×1
lodash ×1
node.js ×1
promise ×1