承诺是如何创建的?
我一个承诺对象的理解如下:承诺是如何创建的?
var Promise = {
then: function() { ... },
catch: function() { ... }
};
如果我有下面这段代码有一个函数,并返回一个承诺对象(fetch.js
):
var xhr = require('xhr')
module.exports = function (uri) {
return new Promise(function (resolve, reject) {
xhr(uri, function (err, res, body) {
if (err) return reject(err)
if (res.statusCode !== 200) return reject(new Error(body))
resolve(body)
})
})
}
然后在我index.js
我请执行以下操作:
var fetch = require('./fetch');
var promise = fetch("some_url");
如何从var promise = fetch("some_url");
返回承诺对象的结构f ormed?
在fetch.js
的new Promise(...)
部分中,您将函数传递给构造函数。我之前没有看到过这种情况,并且想知道new Promise(...)
部分中的resolve
和reject
参数如何传递给上述示例Promise对象中的then
和catch
键。
我不能解释,但您展示例如如何再发挥作用得到解析值或赶得到错误
采用可变保存的承诺,该变量 ,然后执行,然后功能类似波纹管例如
var a = new Promise(function (resolve, reject) {
resolve(1);
})
a.then();
当你执行a.then()时,它会在promiseStatus中得到两个参数PromiseStatus和PromiseValue,你会得到它解析或拒绝,并且在PromiseValue中你将得到你通过解析或拒绝处理器传递的值
Promise
__proto__
:
Promise
catch:catch()
constructor: Promise()
then:then()
Symbol(Symbol.toStringTag):"Promise"
__proto__:Object[[PromiseStatus]]:"resolved"[[PromiseValue]]:1
另请参见[什么\ [\ [PromiseValue \] \]在JavaScript控制台中的含义以及如何得到它](http://*.com/questions/28916710/what-does-promisevalue-mean-in- javascript-console-and-how-do-i-get-it) – guest271314
承诺值会让你作为函数的参数,然后像这样a.then(function(res){})在res中你将得到PromiseValue –
所以基本上.then方法就在那里(基本上是空的),当你创建一个新的Promise并访问[[PromiseValue]]你会调用then来传递给then方法的函数,并以某种方式[[PromiseValue] ]会传递给你传递给函数的参数。 – CapturedTree
[ECMAScript 2015,25.4 Promise Objects,ff。](http://www.ecma-international.org/ecma-262/6.0/#sec-promise-objects) – Andreas
所以它说那里'A PromiseCapability是一个Record值,用于封装承诺对象以及能够解析或拒绝承诺对象的函数。但是,“能够解析或拒绝的函数”是如何从“新Promise(解析,拒绝){...})'构造函数? – CapturedTree
请看到这篇文章https://www.promisejs.org/implementing/和链接的*问题http://*.com/questions/23772801/basic-javascript-promise-implementation-attempt/23785244#23785244 –