我如何将一个承诺resolve()转移到另一个承诺

马斯洛

假设我有一个“ JsonEditor”模块(仅用于示例),它具有3个功能:get(),setProperty()和save()。

这是代码(问题如下):

var fs   = require('fs')
  , q    = require('q');

var jsonEditorModule = (function() {
    return {
        get: function(jsonPath) {
            // ...
        },

        save: function(jsonObject, jsonPath) {
            var qJson = q.defer();

            var jsonContent = JSON.stringify(jsonObject, null, 2);

            fs.writeFile(jsonPath, jsonContent, function(err) {
                if(err) {
                    qJson.reject(err);
                }
                else {
                    qJson.resolve();
                }
            });

            return qJson.promise;
        },

        setProperty: function(prop, value, jsonPath) {
            var self = this;
            var qJson = q.defer();

            this.get(jsonPath)
            .then(
                function(jsonObject) {
                    // Set the property
                    jsonObject[prop] = value;

                    // Save the file
                    self.save(jsonObject, jsonPath)
                    .then(
                        function() {
                            qJson.resolve();
                        },
                        function() {
                            qJson.reject();
                        },
                    );
                }
            );

            return qJson.promise;
        },
    };
})();

module.exports = jsonEditorModule;

看到setProperty()函数中save()之后的then()吗?

看起来很蠢,对吧?

我是否需要手动解决我的诺言和拒绝我的诺言?我不能只是将save()行为转移到我的setProperty()Promise吗?

希望这个问题足够清楚(不要太愚蠢)。

谢谢

毛里西奥·波普(Mauricio Poppe)

您想要实现的目标在这里进行了描述:链接,基本上,如果处理程序返回了promise(我们称之为innerPromiseFromHandler),那么.theninnerPromiseFromHandler获得解析度值时,将在前一个promise上定义的处理程序执行

var jsonEditorModule = (function() {
  return {
    get: function(jsonPath) {
      return Q.delay(1000).then(function () {
        document.write('get...<br/>');
        return 'get';
      });
    },

    save: function(result) {
      return Q.delay(1000).then(function () {
        document.write('save...<br/>');        
        return result + ' save';
      });
    },

    setProperty: function(prop, value, jsonPath) {
      return this.get(jsonPath)
        .then(function(result) {
          return jsonEditorModule.save(result);
        });
    }
  };
})();
      
jsonEditorModule
  .setProperty()
  .then(function (result) {    
    document.write(result + ' finish');
  })
<script src="http://cdnjs.cloudflare.com/ajax/libs/q.js/0.9.2/q.js"></script>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将承诺的结果保存到变量并将其转移到另一个函数?

来自分类Dev

我如何将标签转移到另一个容器

来自分类Dev

如何将ArrayList从另一个活动转移到另一个活动

来自分类Dev

如何将http标头转移到另一个页面?

来自分类Dev

如何将“链接”转移到另一个组件?

来自分类Dev

如何将数据从一个表转移到另一个2个表

来自分类Dev

如何将一个静态列表的项目转移到另一个

来自分类Dev

如何将结构从一个克隆转移到另一个

来自分类Dev

在pyiron中,如何将一些工作转移到另一个项目?

来自分类Dev

将搜索请求从我的网站转移到另一个网站

来自分类Dev

如何将Amazon S3存储桶转移到另一个帐户?

来自分类Dev

如何将所有已安装的插件转移到另一个詹金斯?

来自分类Dev

如何将数据从回调转移到Django中的另一个视图?

来自分类Dev

如何将所有文件从root帐户转移到另一个帐户?

来自分类Dev

将帖子从一个博客转移到另一个博客?

来自分类Dev

将一个JLabel的价值转移到另一个

来自分类Dev

将收集对象从一个jsp转移到另一个

来自分类Dev

将数据从一个$ state转移到另一个

来自分类Dev

将变量从一个功能转移到另一个功能

来自分类Dev

无法将一个标题下的值转移到另一个

来自分类Dev

如何通过python将皮肤权重从一个骨骼转移到另一个骨骼

来自分类Dev

如何将关系从一个表转移到另一个表中具有新ID的表

来自分类Dev

如何将值从一个python脚本类转移到另一个python脚本

来自分类Dev

C#-如何将焦点从一个文本框转移到另一个?

来自分类Dev

如何将批处理文件的执行从一个CMD转移到另一个CMD?

来自分类Dev

如何将数据从一个活动转移到另一个活动并将其设置为textview?

来自分类Dev

如何将一个数据库中表的特定列转移到另一个数据库中?

来自分类Dev

如何用一些短代码将方法调用转移到另一个线程?

来自分类Dev

将1个随机记录从一个表转移到另一个表

Related 相关文章

  1. 1

    如何将承诺的结果保存到变量并将其转移到另一个函数?

  2. 2

    我如何将标签转移到另一个容器

  3. 3

    如何将ArrayList从另一个活动转移到另一个活动

  4. 4

    如何将http标头转移到另一个页面?

  5. 5

    如何将“链接”转移到另一个组件?

  6. 6

    如何将数据从一个表转移到另一个2个表

  7. 7

    如何将一个静态列表的项目转移到另一个

  8. 8

    如何将结构从一个克隆转移到另一个

  9. 9

    在pyiron中,如何将一些工作转移到另一个项目?

  10. 10

    将搜索请求从我的网站转移到另一个网站

  11. 11

    如何将Amazon S3存储桶转移到另一个帐户?

  12. 12

    如何将所有已安装的插件转移到另一个詹金斯?

  13. 13

    如何将数据从回调转移到Django中的另一个视图?

  14. 14

    如何将所有文件从root帐户转移到另一个帐户?

  15. 15

    将帖子从一个博客转移到另一个博客?

  16. 16

    将一个JLabel的价值转移到另一个

  17. 17

    将收集对象从一个jsp转移到另一个

  18. 18

    将数据从一个$ state转移到另一个

  19. 19

    将变量从一个功能转移到另一个功能

  20. 20

    无法将一个标题下的值转移到另一个

  21. 21

    如何通过python将皮肤权重从一个骨骼转移到另一个骨骼

  22. 22

    如何将关系从一个表转移到另一个表中具有新ID的表

  23. 23

    如何将值从一个python脚本类转移到另一个python脚本

  24. 24

    C#-如何将焦点从一个文本框转移到另一个?

  25. 25

    如何将批处理文件的执行从一个CMD转移到另一个CMD?

  26. 26

    如何将数据从一个活动转移到另一个活动并将其设置为textview?

  27. 27

    如何将一个数据库中表的特定列转移到另一个数据库中?

  28. 28

    如何用一些短代码将方法调用转移到另一个线程?

  29. 29

    将1个随机记录从一个表转移到另一个表

热门标签

归档