Skip to content

Latest commit

 

History

History
570 lines (551 loc) · 13.7 KB

promise.md

File metadata and controls

570 lines (551 loc) · 13.7 KB
var p = new Promise(function(accept, reject) {
  reject; //: fn(reason: ?)
  accept({x: 20});
});

p.then(function(value) {
  value; //:: {x: number}
}).then(function(value) {
  value; //:: {x: number}
});

var p2 = new Promise(function(acc) { acc("hi"); });

Promise.all([p2]).then(function(value) {
  value; //: [string]
  return Promise.resolve(33);
}).then(function(value) {
  value; //: number
});

var p3 = Promise.resolve(10);

p3.then(function(value) {
  value; //: number
  return true;
}).then(function(value) {
  value; //: bool
});

var p4 = Promise.resolve(Promise.resolve(10));
p4.then(function(value) {
  value; //: number
});

var arg5 = 1 < 2 ? Promise.resolve(10) : 20;
var p5 = Promise.resolve(arg5);
p5.then(function(value) {
  value; //: number
});

var p6 = Promise.resolve('t').then(function() {
  return 1 < 2 ? Promise.resolve(10) : 20;
}).then(function(value) {
  value; //: number
});

var p7 = Promise.resolve().then(function() {
  return 20;
}).then(function(value) {
  value; //: number
});

var p8 = Promise.resolve();
p8 //: Promise

function myResolve1(arg) {
  return Promise.resolve(arg);
}

myResolve1('s') //:: {:t: string}

function myResolve2(arg) {
  return Promise.resolve(arg);
}

myResolve2('s') //:: {:t: string|number}
myResolve2(4) //:: {:t: string|number}

myResolve2('s').then(function(value) {
  value; //: string|number
})

function myResolve3(arg7) {
  return Promise.resolve(arg7);
}

myResolve3(Promise.resolve(4)).then(function(value) {
  value; //: number
});

myResolve3(Promise.resolve(4)) //:: {:t: number}

myResolve3(4).then(function(value) {
  value; //: number
});
[
  {
    "id": "16783d50-7aef-11e6-a0bf-750d5670e0d1",
    "name": "p",
    "addr": "/p/",
    "kind": "v",
    "type": "Promise",
    "lineno": 1,
    "origin": {
      "!span": "4[0:4]-5[0:5]",
      "!type": "+Promise",
      "!data": {
        "isConstructor": false,
        "type": "Promise.prototype"
      }
    },
    "tagfile": "__DIR__/promise.js"
  },
  {
    "id": "167975d3-7aef-11e6-a0bf-750d5670e0d1",
    "name": "x",
    "addr": "/x/",
    "kind": "v",
    "type": "number",
    "lineno": 3,
    "namespace": "Promise.:t",
    "parent": "167975d2-7aef-11e6-a0bf-750d5670e0d1",
    "origin": {
      "!span": "85[2:10]-86[2:11]",
      "!type": "number",
      "!data": {
        "isConstructor": false,
        "type": "Number.prototype"
      }
    },
    "tagfile": "__DIR__/promise.js"
  },
  {
    "id": "1678b280-7aef-11e6-a0bf-750d5670e0d1",
    "name": ":t",
    "addr": "/function\(acc\) \{ acc\(\"hi\"\); \}/",
    "kind": "v",
    "type": "string",
    "lineno": 12,
    "namespace": "p2",
    "parent": "16788b70-7aef-11e6-a0bf-750d5670e0d1",
    "origin": {
      "!span": "228[11:21]-256[11:49]",
      "!type": "string",
      "!data": {
        "isConstructor": false,
        "scoped": false,
        "isArg": false,
        "type": "String.prototype"
      }
    },
    "tagfile": "__DIR__/promise.js"
  },
  {
    "id": "16788b70-7aef-11e6-a0bf-750d5670e0d1",
    "name": "p2",
    "addr": "/p2/",
    "kind": "v",
    "type": "Promise",
    "lineno": 12,
    "origin": {
      "!span": "211[11:4]-213[11:6]",
      "!type": "+Promise",
      "!data": {
        "isConstructor": false,
        "type": "Promise.prototype"
      }
    },
    "tagfile": "__DIR__/promise.js"
  },
  {
    "id": "1678b281-7aef-11e6-a0bf-750d5670e0d1",
    "name": "p3",
    "addr": "/p3/",
    "kind": "v",
    "type": "Promise",
    "lineno": 21,
    "origin": {
      "!span": "408[20:4]-410[20:6]",
      "!type": "+Promise",
      "!data": {
        "isConstructor": false,
        "type": "Promise.prototype"
      }
    },
    "tagfile": "__DIR__/promise.js"
  },
  {
    "id": "1678b282-7aef-11e6-a0bf-750d5670e0d1",
    "name": ":t",
    "addr": "/10/",
    "kind": "v",
    "type": "number",
    "lineno": 21,
    "namespace": "p3",
    "parent": "1678b281-7aef-11e6-a0bf-750d5670e0d1",
    "origin": {
      "!span": "429[20:25]-431[20:27]",
      "!type": "number",
      "!data": {
        "isConstructor": false,
        "scoped": false,
        "isArg": false,
        "type": "Number.prototype"
      }
    },
    "tagfile": "__DIR__/promise.js"
  },
  {
    "id": "1678b283-7aef-11e6-a0bf-750d5670e0d1",
    "name": "p4",
    "addr": "/p4/",
    "kind": "v",
    "type": "Promise",
    "lineno": 30,
    "origin": {
      "!span": "549[29:4]-551[29:6]",
      "!type": "+Promise",
      "!data": {
        "isConstructor": false,
        "type": "Promise.prototype"
      }
    },
    "tagfile": "__DIR__/promise.js"
  },
  {
    "id": "1678b284-7aef-11e6-a0bf-750d5670e0d1",
    "name": ":t",
    "addr": "/Promise\.resolve\(10\)/",
    "kind": "v",
    "type": "number",
    "lineno": 30,
    "namespace": "p4",
    "parent": "1678b283-7aef-11e6-a0bf-750d5670e0d1",
    "origin": {
      "!span": "570[29:25]-589[29:44]",
      "!type": "number",
      "!data": {
        "isConstructor": false,
        "scoped": false,
        "isArg": false,
        "type": "Number.prototype"
      }
    },
    "tagfile": "__DIR__/promise.js"
  },
  {
    "id": "167975d6-7aef-11e6-a0bf-750d5670e0d1",
    "name": ":t",
    "addr": "/10/",
    "kind": "v",
    "type": "number",
    "lineno": 35,
    "namespace": "arg5",
    "parent": "167975d5-7aef-11e6-a0bf-750d5670e0d1",
    "origin": {
      "!span": "678[34:35]-680[34:37]",
      "!type": "number",
      "!data": {
        "isConstructor": false,
        "scoped": false,
        "isArg": false,
        "type": "Number.prototype"
      }
    },
    "tagfile": "__DIR__/promise.js"
  },
  {
    "id": "167975d5-7aef-11e6-a0bf-750d5670e0d1",
    "name": "arg5",
    "addr": "/arg5/",
    "kind": "v",
    "type": "?|number",
    "lineno": 35,
    "parent": "167975d4-7aef-11e6-a0bf-750d5670e0d1",
    "origin": {
      "!span": "647[34:4]-651[34:8]",
      "!type": "?|number",
      "!data": {
        "isConstructor": false,
        "scoped": false,
        "isArg": false
      }
    },
    "tagfile": "__DIR__/promise.js"
  },
  {
    "id": "1678b285-7aef-11e6-a0bf-750d5670e0d1",
    "name": "p5",
    "addr": "/p5/",
    "kind": "v",
    "type": "Promise",
    "lineno": 36,
    "origin": {
      "!span": "692[35:4]-694[35:6]",
      "!type": "+Promise",
      "!data": {
        "isConstructor": false,
        "type": "Promise.prototype"
      }
    },
    "tagfile": "__DIR__/promise.js"
  },
  {
    "id": "1678b286-7aef-11e6-a0bf-750d5670e0d1",
    "name": ":t",
    "addr": "/arg5/",
    "kind": "v",
    "type": "number",
    "lineno": 36,
    "namespace": "p5",
    "parent": "1678b285-7aef-11e6-a0bf-750d5670e0d1",
    "origin": {
      "!span": "713[35:25]-717[35:29]",
      "!type": "number",
      "!data": {
        "isConstructor": false,
        "scoped": false,
        "isArg": false,
        "type": "Number.prototype"
      }
    },
    "tagfile": "__DIR__/promise.js"
  },
  {
    "id": "1678b287-7aef-11e6-a0bf-750d5670e0d1",
    "name": "p6",
    "addr": "/p6/",
    "kind": "v",
    "type": "Promise",
    "lineno": 41,
    "origin": {
      "!span": "775[40:4]-777[40:6]",
      "!type": "+Promise",
      "!data": {
        "isConstructor": false,
        "type": "Promise.prototype"
      }
    },
    "tagfile": "__DIR__/promise.js"
  },
  {
    "id": "1678b288-7aef-11e6-a0bf-750d5670e0d1",
    "name": ":t",
    "addr": "/function\(value\) \{/",
    "kind": "v",
    "type": "number",
    "lineno": 43,
    "namespace": "p6",
    "parent": "1678b287-7aef-11e6-a0bf-750d5670e0d1",
    "origin": {
      "!span": "870[42:8]-909[44:1]",
      "!type": "number",
      "!data": {
        "isConstructor": false,
        "scoped": false,
        "isArg": false,
        "type": "Number.prototype"
      }
    },
    "tagfile": "__DIR__/promise.js"
  },
  {
    "id": "1678b289-7aef-11e6-a0bf-750d5670e0d1",
    "name": "p7",
    "addr": "/p7/",
    "kind": "v",
    "type": "Promise",
    "lineno": 47,
    "origin": {
      "!span": "917[46:4]-919[46:6]",
      "!type": "+Promise",
      "!data": {
        "isConstructor": false,
        "type": "Promise.prototype"
      }
    },
    "tagfile": "__DIR__/promise.js"
  },
  {
    "id": "1678b28a-7aef-11e6-a0bf-750d5670e0d1",
    "name": ":t",
    "addr": "/function\(value\) \{/",
    "kind": "v",
    "type": "number",
    "lineno": 49,
    "namespace": "p7",
    "parent": "1678b289-7aef-11e6-a0bf-750d5670e0d1",
    "origin": {
      "!span": "979[48:8]-1018[50:1]",
      "!type": "number",
      "!data": {
        "isConstructor": false,
        "scoped": false,
        "isArg": false,
        "type": "Number.prototype"
      }
    },
    "tagfile": "__DIR__/promise.js"
  },
  {
    "id": "1678b28b-7aef-11e6-a0bf-750d5670e0d1",
    "name": "p8",
    "addr": "/p8/",
    "kind": "v",
    "type": "Promise",
    "lineno": 53,
    "origin": {
      "!span": "1026[52:4]-1028[52:6]",
      "!type": "+Promise",
      "!data": {
        "isConstructor": false,
        "type": "Promise.prototype"
      }
    },
    "tagfile": "__DIR__/promise.js"
  },
  {
    "id": "1678d990-7aef-11e6-a0bf-750d5670e0d1",
    "name": "arg",
    "addr": "/arg/",
    "kind": "v",
    "type": "string",
    "lineno": 56,
    "namespace": "myResolve1",
    "parent": "1678b28c-7aef-11e6-a0bf-750d5670e0d1",
    "origin": {
      "!span": "1086[55:20]-1089[55:23]",
      "!type": "string",
      "!data": {
        "isConstructor": false,
        "scoped": true,
        "isArg": true,
        "type": "String.prototype"
      }
    },
    "tagfile": "__DIR__/promise.js"
  },
  {
    "id": "1678b28c-7aef-11e6-a0bf-750d5670e0d1",
    "name": "myResolve1",
    "addr": "/myResolve1/",
    "kind": "f",
    "type": "Promise function(string)",
    "lineno": 56,
    "origin": {
      "!span": "1075[55:9]-1085[55:19]",
      "!type": "fn(arg: string) -> +Promise",
      "!data": {
        "isConstructor": false,
        "type": "Function.prototype"
      }
    },
    "tagfile": "__DIR__/promise.js"
  },
  {
    "id": "1678d991-7aef-11e6-a0bf-750d5670e0d1",
    "name": "myResolve2",
    "addr": "/myResolve2/",
    "kind": "f",
    "type": "Promise function(string|number)",
    "lineno": 62,
    "origin": {
      "!span": "1171[61:9]-1181[61:19]",
      "!type": "fn(arg: string|number) -> +Promise",
      "!data": {
        "isConstructor": false,
        "type": "Function.prototype"
      }
    },
    "tagfile": "__DIR__/promise.js"
  },
  {
    "id": "1678d993-7aef-11e6-a0bf-750d5670e0d1",
    "name": "arg7",
    "addr": "/arg7/",
    "kind": "v",
    "type": "?|number",
    "lineno": 73,
    "namespace": "myResolve3",
    "parent": "1678d992-7aef-11e6-a0bf-750d5670e0d1",
    "origin": {
      "!span": "1394[72:20]-1398[72:24]",
      "!type": "?|number",
      "!data": {
        "isConstructor": false,
        "scoped": true,
        "isArg": true
      }
    },
    "tagfile": "__DIR__/promise.js"
  },
  {
    "id": "1678d992-7aef-11e6-a0bf-750d5670e0d1",
    "name": "myResolve3",
    "addr": "/myResolve3/",
    "kind": "f",
    "type": "Promise function(?|number)",
    "lineno": 73,
    "origin": {
      "!span": "1383[72:9]-1393[72:19]",
      "!type": "fn(arg7: ?|number) -> +Promise",
      "!data": {
        "isConstructor": false,
        "type": "Function.prototype"
      }
    },
    "tagfile": "__DIR__/promise.js"
  },
  {
    "id": "167975d2-7aef-11e6-a0bf-750d5670e0d1",
    "name": ":t",
    "addr": "/arg7/",
    "kind": "v",
    "type": "number",
    "lineno": 74,
    "namespace": "Promise",
    "parent": "167975d1-7aef-11e6-a0bf-750d5670e0d1",
    "origin": {
      "!span": "1427[73:25]-1431[73:29]",
      "!type": "number",
      "!data": {
        "isConstructor": false,
        "type": "Number.prototype"
      }
    },
    "tagfile": "__DIR__/promise.js"
  },
  {
    "id": "167975d0-7aef-11e6-a0bf-750d5670e0d1",
    "name": ":t",
    "addr": "/4/",
    "kind": "v",
    "type": "number",
    "lineno": 81,
    "namespace": "myResolve3.arg7",
    "parent": "1678d993-7aef-11e6-a0bf-750d5670e0d1",
    "origin": {
      "!span": "1543[80:27]-1544[80:28]",
      "!type": "number",
      "!data": {
        "isConstructor": false,
        "scoped": false,
        "isArg": false,
        "type": "Number.prototype"
      }
    },
    "tagfile": "__DIR__/promise.js"
  }
]
p	__DIR__/promise.js	/p/;"	v	lineno:1	type:Promise
x	__DIR__/promise.js	/x/;"	v	lineno:3	namespace:Promise.:t	type:number
:t	__DIR__/promise.js	/function\(acc\) \{ acc\("hi"\); \}/;"	v	lineno:12	namespace:p2	type:string
p2	__DIR__/promise.js	/p2/;"	v	lineno:12	type:Promise
p3	__DIR__/promise.js	/p3/;"	v	lineno:21	type:Promise
:t	__DIR__/promise.js	/10/;"	v	lineno:21	namespace:p3	type:number
p4	__DIR__/promise.js	/p4/;"	v	lineno:30	type:Promise
:t	__DIR__/promise.js	/Promise\.resolve\(10\)/;"	v	lineno:30	namespace:p4	type:number
:t	__DIR__/promise.js	/10/;"	v	lineno:35	namespace:arg5	type:number
arg5	__DIR__/promise.js	/arg5/;"	v	lineno:35	type:?|number
p5	__DIR__/promise.js	/p5/;"	v	lineno:36	type:Promise
:t	__DIR__/promise.js	/arg5/;"	v	lineno:36	namespace:p5	type:number
p6	__DIR__/promise.js	/p6/;"	v	lineno:41	type:Promise
:t	__DIR__/promise.js	/function\(value\) \{/;"	v	lineno:43	namespace:p6	type:number
p7	__DIR__/promise.js	/p7/;"	v	lineno:47	type:Promise
:t	__DIR__/promise.js	/function\(value\) \{/;"	v	lineno:49	namespace:p7	type:number
p8	__DIR__/promise.js	/p8/;"	v	lineno:53	type:Promise
arg	__DIR__/promise.js	/arg/;"	v	lineno:56	namespace:myResolve1	type:string
myResolve1	__DIR__/promise.js	/myResolve1/;"	f	lineno:56	type:Promise function(string)
myResolve2	__DIR__/promise.js	/myResolve2/;"	f	lineno:62	type:Promise function(string|number)
arg7	__DIR__/promise.js	/arg7/;"	v	lineno:73	namespace:myResolve3	type:?|number
myResolve3	__DIR__/promise.js	/myResolve3/;"	f	lineno:73	type:Promise function(?|number)
:t	__DIR__/promise.js	/arg7/;"	v	lineno:74	namespace:Promise	type:number
:t	__DIR__/promise.js	/4/;"	v	lineno:81	namespace:myResolve3.arg7	type:number