u4250

vuePress-theme-reco u4250    2020 - 2022
u4250 u4250

Choose mode

  • dark
  • auto
  • light
主页
分类
  • C#
  • JAVA
  • webjs
  • nodejs
  • python
  • 杂七杂八
  • 数据库
  • other
  • vscode
  • mpvue
  • vue.js
标签
时间轴
GitHub
author-avatar

u4250

22

文章

19

标签

主页
分类
  • C#
  • JAVA
  • webjs
  • nodejs
  • python
  • 杂七杂八
  • 数据库
  • other
  • vscode
  • mpvue
  • vue.js
标签
时间轴
GitHub

js中request的同步执行(踩坑系列)

vuePress-theme-reco u4250    2020 - 2022

js中request的同步执行(踩坑系列)

u4250 2020-10-31 踩坑异步同步

# Node.js 中 JavaScript 代码的执行顺序

​ **从开始执行的时间点上来看,Node.js 中的所有语句都是顺序执行的。**但是,由于 Node.js 的异步特性,先开始执行并不意味着先执行完毕。这就造成了 Node.js 似乎没有顺序执行的假象。单线程和异步确实不能同时成为一个语言的特性。js选择了成为单线程的语言,所以它本身不可能是异步的,但js的宿主环境(比如浏览器,Node)是多线程的,宿主环境通过某种方式(事件驱动,下文会讲)使得js具备了异步的属性。往下看,你会发现js的机制是多么的简单高效!

# await/async

async function test(){
    return 200;
}
console.log(await test());//错误,await 必须用在 async 方法里
async function main(){
    var s=await test();	//获取异步方法的数据
}
1
2
3
4
5
6
7

# Promise

1.创建Promise实例

var promise = new Promise(function(resolve, reject){
    // ... some code
    
    if (/* 异步操作成功 */) {
        resolve(value);
    } else {
        reject(error);
    }
})
1
2
3
4
5
6
7
8
9

2.then

Promise实例生成后,可用then方法分别指定两种状态回调参数。then 方法可以接受两个回调函数作为参数:

①Promise对象状态改为Resolved时调用 (必选)

②Promise对象状态改为Rejected时调用 (可选)

示例:

let promise = new Promise(function(resolve, reject){
    console.log("AAA");
    resolve()
});
promise.then(() => console.log("BBB"));
console.log("CCC")

// AAA
// CCC
// BBB
1
2
3
4
5
6
7
8
9
10

Promise新建后会立即执行,所以首先输出 AAA。然后,then方法指定的回调函数将在当前脚本所有同步任务执行完后才会执行,所以BBB 最后输出

var request = require('request');
const GET = 'GET';
const POST = 'POST';
const PUT = 'PUT';
const FORM = 'FORM';
const DELETE = 'DELETE';
function requestpost(url, data){
    return new Promise((resolve, reject)=>{
        request({
            timeout: 5000,
            method:"POST",
            url: url,
            form: data
        },function(error,response,body){
            if (!error && response.statusCode == 200) {
                console.log(body);
                body_json = JSON.parse(body);
                if(body_json.status){
                    resolve(response.headers['set-cookie'])
                }
                else{
                    reject("登陆失败")
                }
            }
            else{
                console.log(error);
                reject("超星服务器出问题了··")
            }
        })
    })
}
function requestget(url,cookie){
    return new Promise((resolve, reject)=>{
        request({
            timeout: 5000,
            method:"GET",
            headers:{
             Cookie:cookie
            },
            url: url,
        },function(error,response,body){
            if (!error && response.statusCode == 200) {
                resolve(body)
            }
            else{
                reject("超星服务器出问题了··")
            }
        })
    })
}
module.exports = {
    requestget,
    requestpost
   }
//  requestpromise(POST,url,data).then(function(req){
//     console.log(req)
// }).catch(function(err){
//     console.log(err)
// })

// 无用参考

// request({
//     timeout:5000,    // 设置超时
//     method:'post',    //请求方式
//         url:url, //url
//         form:{
//             'uname': num,
//             'password': pwd,
//             't': 'true'
//         }
         
//     },function (error, response, body) {
//         if (!error && response.statusCode == 200) {
//             console.log(body);
//             var responseCookies = response.headers['set-cookie']
//             var requestCookies='';
//             for(var i=0; i<responseCookies.length; i++){
//                 var oneCookie = responseCookies[i];
//                 oneCookie = oneCookie.split(';');
//                 requestCookies= requestCookies + oneCookie[0]+';';
//                 request({
//                     timeout:5000,
//                     method:'GET',
//                     uri:"http://mooc1-1.chaoxing.com/visit/courses",
//                     headers:{
//                         Cookie: response.headers['set-cookie']
//                     }
//                 },function(error,response,body){
//                     console.log(body)
//                 }
//                 )
//             }
//              console.log(requestCookies)
//         }else{
//             console.log("error");
//         }
//     });


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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100

https://www.cnblogs.com/chenqionghe/p/11406666.html#%E4%BA%8C%E3%80%81%E9%93%BE%E5%BC%8F%E8%B0%83%E7%94%A8-then%E6%96%B9%E6%B3%95

https://blog.csdn.net/qingqingzijinxin/article/details/89095820

https://www.imooc.com/wenda/detail/498801

# node连接MySQL时查询timestamp类型格式错误

# 问题

mysql 日期的字段都是timeStamp 格式为YYYY-MM-DD hh:mm:ss

将取到日期不做任何处理返回给前台又变成了下面的格式

2015-02-15T16:00:00.000Z

# 原因以及解决

这是 Mysql时区 与 Node时区 不一致导致的。

解决方法:配置Node数据库连接。 加上 timezone 这一行:

client: {
	host: '***.***.***.***',
    port: '****',
    user: '****',
    timezone: "08:00"
 }
1
2
3
4
5
6

重启解决。

在 GitHub 上编辑此页
Last Updated: 2021/3/25 下午8:02:56