您现在的位置是:网站首页> 编程资料编程资料
Typescrip异步函数Promise使用方式_javascript技巧_
2023-05-24
398人已围观
简介 Typescrip异步函数Promise使用方式_javascript技巧_
Typescrip异步函数Promise
var p = new Promise(function (resolve, reject) { var x = 1; if (x > 0) { resolve({ msg: '异步调用成功', data: { x: 1, y: 2 } }); } else { reject({ msg: '异步调用失败', data: {} }); } }); //异步调用结果 p.then(function (data) { console.log('OK'); console.log(data); //console.log(data.msg,data.data); })["catch"](function (err) { console.log(err); }); //异步函数 function promiseFunc(t) { console.log("".concat(t / 1000, "\u79D2\u540E\u8C03\u7528\u5F02\u6B65")); return new Promise(function (resolve, reject) { setTimeout(resolve, t, '异步调用完成'); }); } //调用异步函数 promiseFunc(1000).then(function (value) { console.log(value); }); var promiseAction = new Promise(function (resolve, reject) { console.log('执行了一些异步操作...'); resolve('异步操作完成了!'); }); promiseAction.then(function (value) { console.log(value); }); // @ts-ignore // const XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest; // let getDataAsync=(url)=>{ // let p = new Promise((resolve, reject) => { // let c =new XMLHttpRequest(); // c.open('GET',url); // c.onreadystatechange = h; // c.responseType = 'json'; // c.setRequestHeader('Accept','application/json'); // c.send(); // function h(){ // if(this.readyState!==4){return;} // if (this.status===200){ // console.log('请求成功返回:',this.status); // resolve(this.response); // }else { // reject(new Error(this.statusText)); // } // } // }); // return p; // }; // getDataAsync('http://192.168.31.180/data.json') // .then(data=>{console.log(data);}) // .catch(err=>{console.log(err);}); //通过https加载json数据 var url = 'https://img-home.csdnimg.cn/data_json/toolbar/toolbar1105.json'; var url1 = 'https://mp-api.iqiyi.com/base/api/1.0/get_role'; var GetJsonData = function (url) { var https = require('https'); https.get(url, function (response) { var data = ''; //数据正在接收中... response.on('data', function (chunk) { data += chunk; }); //数据接收完成 response.on('end', function () { console.log('同步请求数据完成:', JSON.parse(data)); }); }).on("error", function (error) { console.log("Error: " + error.message); }); }; GetJsonData(url); //异步请求JSON数据实现 var GetJsonDataAsync = function (url) { var https = require('https'); return new Promise(function (resolve, reject) { https.get(url, function (response) { var data = ''; //数据正在接收中... response.on('data', function (chunk) { data += chunk; }); //数据接收完成 response.on('end', function () { //console.log(JSON.parse(data)); resolve(data); //数据接收完成 }); }).on("error", function (error) { console.log("Error: " + error.message); reject(new Error(error.message)); }); }); }; //异步调用 GetJsonDataAsync(url).then(function (value) { console.log("======================下面为异步加载数据================================="); if (typeof value === "string") { console.log('异步加载请求数据完成:', JSON.parse(value)); } })["catch"](function (err) { console.log(err); }); //通过request库请求json数据,使用前 sudo npm i -g request安装包 var request = require('request'); request(url, function (error, response, body) { console.error('错误:', error); console.log('状态码:', response && response.statusCode); console.log('数据:', JSON.parse(body)); }); //异步方式 var RequestJsonAsync = function (url) { return new Promise(function (resolve, reject) { request(url, function (e, r, d) { if (null != e) { reject(new Error(e)); } else { resolve(JSON.parse(d)); } }); }); }; RequestJsonAsync(url).then(function (value) { console.log("==============request异步加载json==============================="); console.log(value); })["catch"](function (err) { console.log(err); }); //nodejs needle库使用 ,使用前 npm i needle --save 安装包 var needle = require('needle'); needle.get(url, function (error, response) { if (!error && response.statusCode == 200) console.log(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", response.body); }); //异步模式 needle('get', url, { json: true }).then(function (resp) { if (resp.statusCode == 200) { console.log(">>>>>>>>>>>>>>异步模式>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", resp.body); } })["catch"](function (err) { console.log(err); }); //使用axios库使用,axios直接异步 使用前安装 npm i -g axios --save var axios = require('axios'); axios.get(url) .then(function (res) { console.log(res); })["catch"](function (err) { console.log(err); }); //axios支持多请求并发 axios.all([ axios.get(url), axios.get(url1) ]).then(axios.spread(function (res1, res2) { console.log(res1); console.log(res2); }))["catch"](function (err) { console.log(err); }); //supertaget库使用 var superagent = require('superagent'); superagent.get(url) .end(function (err, res) { if (err) { return console.log(err); } console.log("superagent库调用==========>", res.body); }); //fetch库使用 使用前安装 npm i node-fetch 3x版本只能import导入 --save 支持异步 // @ts-ignore // import fetch from 'node-fetch'; //不能在模块之外使用 // fetch(url) // .then(res => res.json()) // expecting a json response // .then(json => { // console.log(json); // }) // .catch(err => { // console.log(err); // }); var p1 = new Promise(function (resolve, reject) { resolve('p1 resolve'); }); var p2 = new Promise(function (resolve, reject) { resolve('p2 resolve'); }); //只要p1,p2中的其中一个有状态改变,马上返回pRace var pRace = Promise.race([p1, p2]);//将多个Promise生成一个Promise pRace.then(function (value) { console.log(value); });typescript- typescrip与react
对象的类型
接口 Interfaces 一般首字母大写
interface Person { readonly id: number; // 只读属性 不能修改 name: string; age: number; age?: number; // 可选 [propName: string]: any; // 任意属性 // 注意, } // 顺序 一般是 只读 -> 默认 -> 可选 -> 任意 let tom: Person = { name: 'Tom', age: 25 };一旦定义了任意属性,那么确定属性和可选属性的类型都必须是它的类型的子集:
interface Person { name: string; age?: number; [propName: string]: string; } let tom: Person = { name: 'Tom', age: 25, // 报错 需要是 任意属性的子集 gender: 'male' };任意属性的值允许是 string,但是可选属性 age 的值却是 number,number 不是 string 的子属性,所以报错了
只读的约束存在于第一次给对象赋值的时候,而不是第一次给只读属性赋值的时候
interface Person { readonly id: number; name: string; age?: number; [propName: string]: any; } let tom: Person = { name: 'Tom', gender: 'male' }; tom.id = 89757; // 报错,第一处是在对 tom 进行赋值的时候,没有给 id 赋值。 之后再赋值就报错数组类型
「类型 + 方括号」表示法
let arr: number[] = [1, 2, 3, 4, 5]; // 表示 是数组, 并且数组元素只能为 number 类型
联合类型和数组的结合
// arr 表示 是数组, 并且数组元素只能为 number 和 string 类型 let arr: (number | string)[] = ['1', 'adaf', 2, 3, 5]
数组泛型
let arr: Array= [1, 2, 3, 4, 5];
类数组
常见的类数组都有自己的接口定义,如 IArguments, NodeList, HTMLCollection 等
// error 函数中的 arguments 这也定义会报错 let args: number[] = arguments; // success 改成 let args: IArguments = arguments;
函数类型
函数声明
function sum(x: number, y: number): number { return x + y; }函数表达式
let mySum = function (x: number, y: number): number { return x + y; };这是可以通过编译的,不过事实上,上面的代码只对等号右侧的匿名函数进行了类型定义,而等号左边的 mySum,是通过赋值操作进行类型推论而推断出来的。如果需要我们手动给 mySum 添加类型,则应该是这样:
let mySum: (x: number, y: number) => number = function (x: number, y: number): number { return x + y; };类型断言
function getLength(something: string | number): number { // 将他断言为 string if ((something).length) { return (something).length; } else { return something.toString().length; } } 类型断言不是类型转换,断言成一个联合类型中不存在的类型是不允许的:
// error function toBoolean(something: string | number): boolean { return something; } // Type 'number' is not comparable to type 'boolean' 内置对象
ECMAScript 的内置对象
Boolean、Error、Date、RegExp 等。
DOM 和 BOM 的内置对象
Document、HTMLElement、Event、NodeList 等。
泛型
是指在定义函数、接口或类的时候,不预先指定具体的类型,而在使用的时候再指定类型的一种特性。
function swap(tuple: [T, U]): [U, T] { return [tuple[1], tuple[0]]; }
问题
type 和 Interfaces 的区别
React 中使用
import React, { MouseEvent, ReactNode } from 'react' type Props = { onClick(e: MouseEvent): void children?: ReactNode } const Button = ({ onClick: handleClick, children }: Props) => ( ) 高阶组件的使用方式
import React from 'react'; import { Form } from 'antd'; import { FormComponentProps } from 'antd/es/form'; interface IProps extends FormComponentProps { loading: boolean; } const Page: React.FC = (props) => { return ( Page ) } expo
相关内容
- Typescript使用修饰器混合方法到类的实例_javascript技巧_
- vue3 hook自动导入原理解析_vue.js_
- 关于TypeScript声明合并_javascript技巧_
- Typescript模块的导入导出与继承方式_javascript技巧_
- TypeScript工具类 Partial 和 Required 的场景分析_javascript技巧_
- vue2.x引入threejs的实例代码_vue.js_
- 基于Vue3+TypeScript的全局对象的注入和使用详解_vue.js_
- 深入解析Nodejs中的大文件读写_node.js_
- node中Stream流的详细介绍_node.js_
- monaco editor在Angular的使用详解_AngularJS_
点击排行
本栏推荐
