如何创造承诺?

时间:2017-02-17 06:58:53

标签: 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.js部分的new Promise(...)中,您将函数传递给构造函数。我之前没有见过这样的内容,我想知道resolve部分中的rejectnew Promise(...)参数如何传递给thencatch键在上面的示例Promise对象中。

1 个答案:

答案 0 :(得分:4)

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

将变量保存为该变量的保存承诺 然后执行then函数,如下面的示例

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

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

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