Promise对象,ES6新增的一个全新特性,虽然它出现很久了,but我相信,有很多的小伙伴还是没有怎么用过,今天让我们来好好的学习一下它。

1、Promise 的含义

所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。

在日常开发中,经常需要用到ajax请求数据,拿到数据后,再进行一些处理,完成一些复杂的交互效果。

假如你需要用ajax进行多次请求,而且,每次请求都依赖上一次请求返回的数据来作为参数,然后继续发出请求,你写成这样,场景还原

$.ajax({success:function(res1){$.ajax({success:function(res2){$.ajax({success:function(res3){}});}    });}
});

可能会有更多的嵌套,如此一层一层的执行,无疑是消耗了更多的等待时间,而且多个请求之间如果有先后关系的话,就会出现回调地狱,ES6想了办法整治这种情况,这时候Promise 诞生了。

所以我们知道了 Promise 是异步编程的一种解决方案,比传统的回调函数和事件更合理和强大。

Promise对象有以下两个特点:

  • 对象的状态不受外界影响。Promise对象代表一个异步操作,有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。这也是 Promise 这个名字的由来。
  • 一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise对象的状态改变,只有两种可能:从pending变为fulfilled和从pending变为rejected。只要这两种情况发生,状态就凝固了,不会再变了,会一直保持这个结果,这时就称为 resolved(已定型)。如果改变已经发生了,你再对Promise对象添加回调函数,也会立即得到这个结果。

有了Promise对象,就可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调地狱

有好就有坏,Promise也有一些缺点。1、首先,无法取消Promise,一旦新建它就会立即执行,无法中途取消。2、其次,如果不设置回调函数,Promise内部抛出的错误,不会反应到外部。3、当处于pending状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)。

Promise 的基本用法

2、Promise 的基本用法

接下来,我们就看看它的基本用法:

const promise = new Promise(function(resolve, reject) {});

Promise 对象是全局对象,你也可以理解为一个类,创建Promise实例的时候,要有那个new关键字。Promise构造函数接受一个函数作为参数,其中有两个参数:resolvereject,两个函数均为方法。resolve方法用于处理异步操作成功后业务(即从 pending 变为 resolved)。reject方法用于操作异步操作失败后的业务(即从 pending 变为 rejected)。在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。

Promise 的三种状态

上面也提到了,Promise 对象有三种状态:

  • 1、pending:刚刚创建一个 Promise 实例的时候,表示初始状态;
  • 2、fulfilledresolve 方法调用的时候,表示操作成功;
  • 3、rejectedreject 方法调用的时候,表示操作失败;

下面代码创造了一个Promise实例。

const promise = new Promise(function(resolve, reject) {//实例化后状态:pendingif (/* 异步操作成功 */){resolve(value);// resolve方法调用,状态为:fulfilled} else {reject(error);// reject方法调用,状态为:rejected}
});

初始化实例后,对象的状态就变成了pending;当resolve方法被调用的时候,状态就会由pending变成了成功fulfilled;当reject方法被调用的时候,状态就会由pending变成失败rejected

Promise实例生成以后,可以用then()方法分别指定resolved状态和rejected状态的回调函数,用于绑定处理操作后的处理程序。

看以下操作:

promise.then(function(value) {// 操作成功的处理程序
}, function(error) {// 操作失败的处理程序
});

then()方法可以接受两个回调函数作为参数。第一个回调函数是Promise对象的状态变为resolved时调用,第二个回调函数是Promise对象的状态变为rejected时调用。其中,第二个函数是可选的,不一定要提供。这两个函数都接受Promise对象传出的值作为参数。

说简单点就是参数是两个函数,第一个用于处理操作成功后的业务,第二个用于处理操作异常后的业务

举一个Promise对象的简单例子。

function timeout(ms) {return new Promise((resolve, reject) => {setTimeout(resolve, ms, 'hello world');});
}timeout(100).then((value) => {console.log(value); // hello world
});

上面代码中,timeout()方法返回一个Promise实例,表示一段时间以后才会发生的结果。过了指定的时间(ms参数)以后,Promise实例的状态变为resolved,就会触发then()方法绑定的回调函数。

Promise 新建后就会立即执行。

let promise = new Promise(function(resolve, reject) {console.log('Promise');resolve();
});promise.then(function() {console.log('resolved');
});console.log('Hi!');// Promise
// Hi!
// resolved

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

catach( ) 方法

对于操作异常的程序,Promise专门提供了一个实例方法来处理:catch()方法。

catch() 只接受一个参数,用于处理操作异常后的业务。

getJSON('/posts.json').then(function(posts) {// 处理成功
}).catch(function(error) {// 处理 getJSON 和 前一个回调函数运行时发生的错误console.log('发生错误!', error);
});

Promise使用链式调用,是因为then方法catch方法调用后,都会返回promise对象

上面代码中,getJSON()方法返回一个 Promise 对象,如果该对象状态变为resolved,则会调用then()方法指定的回调函数;如果异步操作抛出错误,状态就会变为rejected,就会调用catch()方法指定的回调函数,处理这个错误。另外,then()方法指定的回调函数,如果运行中抛出错误,也会被catch()方法捕获。

const promise = new Promise(function(resolve, reject) {throw new Error('test');
});
promise.catch(function(error) {console.log(error);
});
// Error: test

上面代码中,promise抛出一个错误,就被catch方法指定的回调函数捕获。

如果 Promise 状态已经变成resolved,再抛出错误是无效的。

const promise = new Promise(function(resolve, reject) {resolve('ok');throw new Error('test');
});
promise.then(function(value) { console.log(value) }).catch(function(error) { console.log(error) });
// ok

上面代码中,Promiseresolve语句后面,再抛出错误,不会被捕获,等于没有抛出。因为 Promise 的状态一旦改变,就永久保持该状态,不会再变了

因为 Promise.prototype.thenPromise.prototype.catch 方法返回promise 对象, 所以它们可以被链式调用

注意: 如果一个promise对象处在fulfilledrejected状态而不是pending状态,那么它也可以被称为 settled 状态。你可能也会听到一个术语resolved ,它表示promise对象处于settled状态。

举了这么多栗子,要是没看懂,让我们串一串吧,梳理一下上面提到的。(认真的看注释)

// 首先用 new 关键字创建一个 `Promise` 实例
const promise = new Promise(function(resolve, reject){// 假设 state 的值为 truelet state = true;if( state ){// 调用操作成功方法resolve('操作成功');//状态:从pending 到 fulfilled}else{// 调用操作异常方法reject('操作失败');//状态:从pending 到 rejected}
});
promise.then(function (res) {//操作成功的处理程序console.log(res)
}).catch(function (error) {//操作失败的处理程序console.log(error)
})
// 控制台输出:操作成功

上面示例介绍了从 创建实例,状态转换,then方法和catch方法的使用

如果多个操作之间层层依赖,我们用Promise又是怎么处理的呢?

const promise = new Promise(function(resolve, reject){if( true ){// 调用操作成功方法resolve('操作成功');//状态:从pending 到 fulfilled}else{// 调用操作异常方法reject('操作失败');//状态:从pending 到 rejected}
});
promise.then(a).then(b).then(c).catch(requestError);function a() {console.log('请求A成功');return '请求B,下一个是谁';
}
function b(res) {console.log('上一步的结果:'+ res);console.log('请求B成功');return '请求C,下一个是谁';
}
function c(res) {console.log('上一步的结果:'+ res);console.log('请求C成功');
}
function requestError() {console.log('请求失败');
}

如图所示:

上面的代码,先是创建一个实例,还声明了4个函数,其中三个是分别代表着请求A,请求B,请求C;有了then方法,三个请求操作再也不用层层嵌套了。我们使用then方法,按照调用顺序,很直观地完成了三个操作的绑定,并且,如果请求B依赖于请求A的结果,那么,可以在请求A的程序用使用return语句把需要的数据作为参数,传递给下一个请求,示例中我们就是使用return实现传递参数给下一步操作的。

为了更直观的看到示例所展示的情况,在下做了一张图:

再举个Promise 中微任务顺序的栗子1:

var p = new Promise( (resolve, reject) => {setTimeout( () => {console.log('1');}, 3000);resolve(1);
}).then( () => {  // 描述:.then() 1-1Promise.resolve().then( () => { // 描述:.then() 2-1Promise.resolve().then( () => { // 描述:.then() 3-1console.log('2');})})
}).then( () => { // 描述:.then() 1-2console.log('3');
})
// 3
// 2
// 1    (3秒之后执行打印的值)

如上示例解释:

  • 1.先执行new Promise第一层的代码,遇到setTimeout,将其推入宏任务队列中(此时未执行,排在当前script代码块的宏任务之后执行),然后遇到了resolve,执行Promise后面的代码。
  • 2.遇到.then 1-1,推入微任务队列里(只是推入,并未执行,所以.then 1-2的执行时机还没有到),这个时候发现没有其他的操作需要处理(比如推其他的微任务到队列里),那么就执行当前微任务队列里的函数,也就是执行.then 1-1的回调函数。
  • 3.执行.then 1-1的回调函数的时候,发现了里面有一个完成态的Promise对象,不用管继续走,遇到了.then 2-1,推入微任务队列(只是推入,并未执行),此时.then 1-1回调执行完毕(没有return值,相当于return了一个undefined),然后Promise得以继续往下执行,遇到了.then 1-2,继续推入微任务队列(依然没执行),这时发现没有其他操作,开始顺位执行当前微任务队列里的函数(此时微任务队列里存放了.then 2-1.then 1-2的回调函数),执行.then 2-1的回调函数时,又遇到了一个完成态的Promise,不用管继续走,遇到了.then 3-1,将其推入微任务队列(未执行),然后执行.then1-2的回调,打印 3 ,此时已经没有了其他的操作,所以继续执行微任务队列里剩余的函数,即.then 3-1的回调函数,打印 2
  • 4.至此,微任务队列已经执行完毕,开始执行宏任务队列中的下一个宏任务,打印 1

再举个Promise 中微任务顺序的栗子2:

var p2 = new Promise( (resolve, reject) => {setTimeout( () => {console.log('1');  }, 3000)resolve(1);
}).then( () => { // 描述:.then() 1-1Promise.resolve().then( () => { // 描述:.then() 2-1console.log('2');}).then( () => { // 描述:.then() 1-2console.log('3');})
})
// 2
// 3
// 1   (3秒之后执行打印的值)

如上示例解释:

  • 1.如同栗子1。
  • 2.如同栗子2。
  • 3.执行.then 1-1的回调函数的时候,发现了里面有一个完成态的Promise对象,不用管继续走,遇到了.then 2-1,推入微任务队列(只是推入,并未执行),此时.then 1-1回调执行完毕(没有return值,相当于return了一个undefined),然后Promise得以继续往下执行,遇到了.then 1-2,继续推入微任务队列(依然没执行),这时发现没有其他操作,开始顺位执行当前微任务队列里的函数(此时微任务队列里存放了.then 2-1.then 1-2的回调函数),执行.then 2-1的回调函数,打印 2,然后执行.then1-2的回调,打印 3
  • 4.至此,微任务队列已经执行完毕,开始执行宏任务队列中的下一个宏任务,打印 1

除了提供了实例方法以外,Promise还提供了一些类方法,也就是不用创建实例,也可以调用的方法,下面列举几个栗子:

Promise.all( ) 方法

Promise.all(iterable) 方法返回一个 Promise 实例,此实例在 iterable 参数内所有的 promise 都“完成(resolved)”或参数中不包含 promise 时回调完成(resolve);如果参数中 promise 有一个失败(rejected),此实例回调失败(reject),失败原因的是第一个失败 promise 的结果。

var promise1 = Promise.resolve(3);
var promise2 = 42;
var promise3 = new Promise(function(resolve, reject) {setTimeout(resolve, 3000, 'foo');
});Promise.all([promise1, promise2, promise3]).then(values => {console.log(values);
});
// expected output: Array [3, 42, "foo"]

解析:

因为实例promise3还没有进入成功fulfilled状态;等到了3000毫秒以后,实例promise3也进入了成功fulfilled状态,Promise.all( )才会进入then方法,然后在控制台输出:[3, 42, “foo”]

应用场景:我们执行某个操作,这个操作需要得到需要多个接口请求回来的数据来支持,但是这些接口请求之前互不依赖,不需要层层嵌套。这种情况下就适合使用Promise.all( )方法,因为它会得到所有接口都请求成功了,才会进行操作。

注意:如果传入的 promise 中有一个失败(rejected),Promise.all异步地将失败的那个结果给失败状态的回调函数,而不管其它 promise 是否完成。

Promise.finally( )方法

finally方法用于指定不管 Promise 对象最后状态如何,都会执行的操作。该方法是 ES2018 引入标准的。这避免了同样的语句需要在then()catch()中各写一次的情况。

promise
.then(result => {···})
.catch(error => {···})
.finally(() => {···});

上面代码中,不管promise最后的状态,在执行完thencatch指定的回调函数以后,都会执行finally方法指定的回调函数。

下面是一个例子,服务器使用 Promise 处理请求,然后使用finally方法关掉服务器。

server.listen(port).then(function () {// ...}).finally(server.stop);

如果你想在 promise 执行完毕后无论其结果怎样都做一些处理或清理时,finally() 方法可能是有用的。

Promise.race( ) 方法

Promise.race()方法同样是将多个 Promise 实例,包装成一个新的 Promise 实例。

const p = Promise.race([p1, p2, p3]);

上面代码中,只要p1p2p3之中有一个实例率先改变状态,p 的状态就跟着改变。那个率先改变的 Promise 实例的返回值,就传递给p的回调函数。

Promise.race方法的参数与Promise.all方法一样,如果不是 Promise 实例,就会先调用下面讲到的Promise.resolve方法,将参数转为 Promise 实例,再进一步处理。

const p = Promise.race([fetch('index.php'),new Promise(function (resolve, reject) {setTimeout(() => reject(new Error('request timeout')), 5000)})
]);p
.then(console.log)
.catch(console.error);

上面代码中,如果 5 秒之内fetch方法无法返回结果,变量p的状态就会变为rejected,从而触发catch方法指定的回调函数。


let promise1 = new Promise(function(resolve){setTimeout(function () {resolve('promise1实例成功');},4000);
});
let promise2 = new Promise(function(resolve,reject){setTimeout(function () {reject('promise2实例失败');},2000);
});
Promise.race([promise1, promise2]).then(function(result){console.log(result);
}).catch(function(error){console.log(error);
});
// expected output: promise2实例失败

由于promise2实例中2000毫秒之后就执行reject方法,早于实例promise15000毫秒,所以最后输出的是:promise2实例失败。

Promise.resolve( ) 方法

有时需要将现有对象转为 Promise 对象,Promise.resolve方法就起到这个作用。

const jsPromise = Promise.resolve($.ajax('/whatever.json'));

上面代码将 jQuery 生成的deferred对象,转为一个新的 Promise 对象。

Promise.resolve等价于下面的写法。

Promise.resolve('foo')
// 等价于
new Promise(resolve => resolve('foo'))

Promise.resolve(value)方法返回一个以给定值解析后的Promise 对象。如果该值为promise,返回这个promise;如果这个值是thenable(即带有"then" 方法)),返回的promise会“跟随”这个thenable的对象,采用它的最终状态;否则返回的promise将以此值完成。此函数将类promise对象的多层嵌套展平。

警告不要在解析为自身的thenable 上调用Promise.resolve。这将导致无限递归,因为它试图展平无限嵌套的promise。一个例子是将它与Angular中的异步管道一起使用。

使用静态Promise.resolve方法

Promise.resolve("Success").then(function(value) {console.log(value); // "Success"
}, function(value) {// 不会被调用
});

resolve一个数组

var p = Promise.resolve([1,2,3]);
p.then(function(v) {console.log(v[0]); // 1
});

Resolve另一个promise

var original = Promise.resolve(33);
var cast = Promise.resolve(original);
cast.then(function(value) {console.log('value: ' + value);
});
console.log('original === cast ? ' + (original === cast));/*
*  打印顺序如下,这里有一个同步异步先后执行的区别
*  original === cast ? true
*  value: 33
*/

Promise.reject( ) 方法

Promise.reject(reason)方法返回一个带有拒绝原因reason参数的Promise对象。

const p = Promise.reject('出错了');
// 等同于
const p = new Promise((resolve, reject) => reject('出错了'))p.then(null, function (s) {console.log(s)
});
// 出错了

上面代码生成一个 Promise 对象的实例 p,状态为rejected,回调函数会立即执行。

注意Promise.reject()方法的参数,会原封不动地作为reject的理由,变成后续方法的参数。这一点与Promise.resolve方法不一致。

const thenable = {then(resolve, reject) {reject('出错了');}
};Promise.reject(thenable)
.catch(e => {console.log(e === thenable)
})
// true

举一个promise 应用的栗子:

我们可以将图片的加载写成一个Promise,一旦加载完成,Promise的状态就发生变化。

const preloadImage = function (path) {return new Promise(function (resolve, reject) {const image = new Image();image.onload  = resolve;image.onerror = reject;image.src = path;});
};

Generator 函数与 Promise 的结合

使用 Generator函数 管理流程,遇到异步操作的时候,通常返回一个Promise对象。

function getFoo () {return new Promise(function (resolve, reject){resolve('foo');});
}const g = function* () {try {const foo = yield getFoo();console.log(foo);} catch (e) {console.log(e);}
};function run (generator) {const it = generator();function go(result) {if (result.done) return result.value;return result.value.then(function (value) {return go(it.next(value));}, function (error) {return go(it.throw(error));});}go(it.next());
}run(g);

上面代码的 Generator 函数g之中,有一个异步操作getFoo,它返回的就是一个Promise对象。函数run用来处理这个Promise对象,并调用下一个next方法。

我目前所写的项目大多数都是Generator函数 与 Promise 的结合。

这个篇幅有点藏,如果你没有收藏可以收藏,以后慢慢的观看。

以下是我的公众号,关注我,会让你有意想不到的收获~

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 约战Angular中Promise(1)

    在angular出现之前,web开发中前端跟后台的交互采用xhr的ajax技术,即xhr的异步请求,异步肯定就不能阻塞当前的线程,所以这个时候回调就非常重要,在commonJS中曾定义过promise规范,即一个异步请求函数把一个耗…...

    2024/3/15 16:08:32
  2. angular--异步编程

    1. 异步编程 目前常见的异步编程的几种方法: 1、回调函数2、Promise3、Rxjs 1.1 准备工作 创建一个asynDemo的项目 ng new asynDemo;创建一个obtain的服务,并且再app.moudle文件中引入和声明 ng g service services/obtain创建一个home组件,并…...

    2024/3/29 13:26:29
  3. 全切要双眼皮恢复过程

    ...

    2024/3/15 16:08:29
  4. angular-busy用法

    angular-busy 在任何$ http或$资源请求或任何承诺上显示繁忙/加载指示符。演示 现场演示 入门 用Bower,npm,yarn安装,或者直接从repo的dist文件夹下载文件。bower install angular-busy --save npm install cgross/angular-busy添加dist/angu…...

    2024/3/23 13:08:27
  5. angular 的一些用法

    1.表单(FormBuilder与FormGroup) 1.1 初始化 import { FormBuilder, FormGroup, Validators } from angular/forms;export class FormTestComponent implements OnInit {form: FormGroup;constructor(private fb: FormBuilder){}ngOnInit(): void {thi…...

    2024/3/26 0:22:13
  6. promise 和 Observable 的区别

    StackOverflow 上的讨论:What is the difference between Promises and Observables? 得赞最高的一个回答:1777 赞 当异步操作完成或失败时,Promise 会处理单个事件。 注意:有 Promise 库支持 cancellation 操作,但…...

    2024/3/18 22:32:41
  7. 做完双眼皮可以跑步

    ...

    2024/3/15 16:08:25
  8. javascript angularjs 使用promise 异步获取数据

    promise是一种新对象,可以很好的处理异步请求,有些使用场景callback回调函数不适用,这个时候就可以使用promise。 在浏览器中存在兼容问题,非常旧版的谷歌浏览器可能不支持 首先举一个简单的例子(非angular) var myFirstPromise new Promise(function(resolve, r…...

    2024/3/15 16:08:23
  9. 给你一个承诺 - 玩转 AngularJS 的 Promise

    了解Promise 在谈论Promise之前我们要了解一下一些额外的知识;我们知道JavaScript语言的执行环境是“单线程”,所谓单线程,就是一次只能够执行一个任务,如果有多个任务的话就要排队,前面一个任务完成后才可以继续下一个…...

    2024/3/20 8:53:35
  10. 割完双眼皮可以跑步吗

    ...

    2024/3/15 16:08:22
  11. 双眼皮手术得结膜炎

    ...

    2024/3/15 16:08:20
  12. 双眼皮埋线广州美莱?s

    ...

    2024/3/25 19:14:43
  13. 潍坊人民医院常德割双眼皮的有哪些医院

    ...

    2024/3/13 18:29:02
  14. python spring boot android 机器学习书籍下载地址

    最新IT书籍第D2期(2018-08-14): 《30天App开发从0到1 APICloud移动开发实战》_邹达、李德兴 链接: https://pan.baidu.com/s/1enPsfF6ESEmGo1trPUQ6Mw 密码: iw4v 《Android组件化架构》_苍王 链接: https://pan.baidu.com/s/14lY7v8tolG…...

    2024/3/13 18:28:58
  15. 我与IDEA的不舍情缘

    JetBrains这家来自于捷克的公司是一家真正伟大的公司,它向全球的广大开发者提供了诸多的生产力工具,让我们这些以编程为生的程序员们能够真正享受到编程的乐趣。JetBrains的产品线十分丰富,从大名鼎鼎的IntelliJ IDEA、PyCharm、PhpStorm、We…...

    2024/3/13 18:28:58
  16. 免费的编程中文书籍索引【必须转载、有空必看】

    免费的编程中文书籍索引 免费的编程中文书籍索引 国外程序员在 stackoverflow 推荐的程序员必读书籍,中文版。 stackoverflow 上的程序员应该阅读的非编程类书籍有哪些? 中文版 github 上的一个流行的编程书籍索引 中文版 目录 语言无关类 操作系统智能…...

    2024/3/25 6:02:13
  17. 大庆哪里做双眼皮好

    ...

    2024/3/13 18:28:55
  18. angularjs实战项目01-构建开发环境

    angularjs诞生于2009年,先由谷歌主导开发,其先进的设计和理念,解决了前端开发的部门痛点,因而得到广泛的使用。本系列将以完成一个《学习笔记本》实例应用为途径去学习angularjs的使用。 《学习笔记本》应用将实现以下几项功能&a…...

    2024/3/13 18:28:54
  19. 前端工程化之脚手架

    学习资料:拉勾课程《大前端高薪训练营》 阅读建议:搭配文章的侧边栏目录进行食用,体验会更佳哦 内容说明:本文不做知识点的搬运工,技术详情请查看官方文档 说到前端的脚手架,大家肯定立马就能想到vue-cli、…...

    2024/3/19 19:48:14
  20. Yeoman-- 一个强大的前端构建工具

    原文还是在简书上: Yeoman-- 一个强大的前端构建工具,我只是自己的搬运工!! 上期跟大家试了试Vue-cli这个构建工具,这个让我想起了很多其他的前端工具,其中一个就是Yeoman(上次就剧透了的),所以…...

    2024/3/15 16:08:20

最新文章

  1. 测量仪器常见技术指标

    本文介绍测量仪器常见技术指标。 1.误差 误差也叫示值误差,指被测量仪器示值与测量标准提供的约定真值之差。误差有3种主要形式。 1)绝对误差 示值误差用绝对误差表示为: 其中, 为用绝对误差表示的测量仪器示值误差 x为被测仪器的示值…...

    2024/3/29 16:34:14
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. 如何使用极狐GitLab 自定义 Pages 根域名

    本文作者:徐晓伟 GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 本文主要讲述了极狐GitLab Pages …...

    2024/3/28 6:59:08
  4. 【新手小白教程】2024最新:如何轻松订阅Patreon及其支付、充值全攻略

    前言 什么是Patreon Patreon是一个极具创新性的在线平台,它为内容创作者提供了一个独特的机会,使他们能够直接通过订阅服务模式从粉丝那里获得资金支持或打赏。 这个平台吸引了各种类型的创作者,包括艺术家、音乐家、作家、视频制作人等&…...

    2024/3/29 14:10:28
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/3/27 10:21:24
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/3/24 20:11:25
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/3/29 2:45:46
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/3/29 16:26:39
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/3/29 5:19:52
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/3/28 17:01:12
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/3/29 11:11:56
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/3/29 1:13:26
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/3/29 8:28:16
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/3/29 7:41:19
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/3/24 20:11:18
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/3/29 9:57:23
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/3/29 0:49:46
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/3/24 20:11:15
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/3/27 7:12:50
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/3/24 20:11:13
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/3/26 11:21:23
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/3/28 18:26:34
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/3/28 12:42:28
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/3/28 20:09:10
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57