javascript - promise 是如何创建的?

标签 javascript node.js promise

我对Promise对象的理解是这样的:

var Promise = { 
    then: function() { ... },
    catch: function() { ... }
};

如果下面的代码有一个函数并返回一个 Promise 对象 (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");返回的promise对象的结构是怎样形成的?

fetch.jsnew Promise(...) 部分中,您将函数传递给构造函数。我以前从未见过这样的东西,我想知道 new Promise(...) 部分中的 resolvereject 参数是如何得到的传递给上面示例 Promise 对象中的 thencatch 键。

最佳答案

我无法解释,但可以向您展示函数如何获取解析值或捕获错误

将一个变量保存为该变量的 promise 然后执行然后像下面的例子一样运行

var a = new Promise(function (resolve, reject) {
    resolve(1);
})
a.then();

当你执行 a.then() 时,它会在 promiseStatus 中获得两个参数 PromiseStatus 和 PromiseValue,你将得到它被解析或拒绝,而在 PromiseValue 中你将获得你通过 resolve 或 reject 处理程序传递的值

Promise
__proto__
:
Promise
catch:catch()
constructor: Promise()
then:then()
Symbol(Symbol.toStringTag):"Promise"
__proto__:Object[[PromiseStatus]]:"resolved"[[PromiseValue]]:1

关于javascript - promise 是如何创建的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42291353/

相关文章:

javascript - HTML 视频播放器

Javascript 和 HTML5,修改现有渐变

javascript - 使用 codemirror 的简单模式的奇怪的正则表达式行为

javascript - Node JS - C++ 插件的测试策略

javascript - Mongoose .js : Find user by username LIKE value

javascript - NodeJS promise 阻止请求

javascript - IndexedDB 事务和 Promises 之间的相互作用不一致

javascript - jQuery 终端 : how to unset mask?

javascript - 使用nodemon无法识别Electron包

javascript - ES6 Promise.all() promise 数组的奇怪解析