小编Lio*_*rez的帖子

用Node.js中的promises替换回调

我有一个简单的节点模块,它连接到一个数据库,并有几个接收数据的函数,例如这个函数:


dbConnection.js:

import mysql from 'mysql';

const connection = mysql.createConnection({
  host: 'localhost',
  user: 'user',
  password: 'password',
  database: 'db'
});

export default {
  getUsers(callback) {
    connection.connect(() => {
      connection.query('SELECT * FROM Users', (err, result) => {
        if (!err){
          callback(result);
        }
      });
    });
  }
};
Run Code Online (Sandbox Code Playgroud)

该模块将从不同的节点模块以这种方式调用:


app.js:

import dbCon from './dbConnection.js';

dbCon.getUsers(console.log);
Run Code Online (Sandbox Code Playgroud)

我想使用promises而不是回调来返回数据.到目前为止,我已经阅读了以下线程中的嵌套promise:使用嵌套Promise编写清洁代码,但我找不到任何对这个用例来说足够简单的解决方案.result使用承诺返回的正确方法是什么?

javascript node.js promise q bluebird

91
推荐指数
3
解决办法
9万
查看次数

使用工厂公开一个简单的API

我正在尝试编写一个公开简单用户API的工厂.我是AngularJS的新手,我对工厂以及如何使用它们有点困惑.我见过其他主题,但没有一个与我的用例很匹配.

为简单起见,我想要实现的唯一功能是将所有用户放入阵列中,然后通过注入的工厂将它们传递给控制器​​.

我将用户存储在json文件中(现在我只想读取该文件,而不修改数据)

users.json:

[
{
    "id": 1,
    "name": "user1",
    "email": "a@b.c"
},
{
    "id": 2,
    "name": "user2",
    "email": "b@b.c"
}
]
Run Code Online (Sandbox Code Playgroud)

我想写的工厂应该是这样的:

UsersFactory:

app.factory('usersFactory', ['$http', function ($http) {
    return {
        getAllUsers: function() {
            return $http.get('users.json').then(
                function(result) {
                    return result.data;
                },
                function(error) {
                    console.log(error);
                }
            );
        }
    };
}]);
Run Code Online (Sandbox Code Playgroud)

最后,控制器调用将是这样的:

UsersController

app.controller('UsersCtrl', ['$scope', 'usersFactory', function($scope, usersFactory){
    usersFactory.getAllUsers().then(function (result) {
        $scope.users = result;
    });
}]);
Run Code Online (Sandbox Code Playgroud)

我在网上搜索过,似乎以这种方式使用工厂并不是一个好习惯,如果我想实现更多功能,比如在数据源中添加/删除新用户,或者某种方式将数组存储在工厂中,这不是那种方法.我见过一些使用工厂的地方new UsersFactory().

尝试使用API​​时,使用工厂的正确方法是什么?

是否可以使用包含$http.get()结果的对象初始化工厂,然后以这种方式从控制器中使用它?

var usersFactory = new UsersFactory(); // at this …
Run Code Online (Sandbox Code Playgroud)

javascript factory angularjs

6
推荐指数
1
解决办法
856
查看次数

React useEffect 清理功能取决于异步等待结果

我有一个反应组件,它异步获取一些资源,然后订阅资源更改。

问题是清理函数不在该资源的关闭中:

useEffect(() => {
  const onResourceChange = () => { 
    console.log('resource changed');
  };

  getSomeResource().then(resource => {
    resource.subscribe(onResourceChange);
  });

  return () => {
    resource.unsubscribe(onResourceChange); // Error! resource is undefined
  }
}, []);
Run Code Online (Sandbox Code Playgroud)

useEffect由于不允许使用异步函数,因此在useEffect的 cleanup 函数中取消订阅此资源的最佳方法是什么?

javascript async-await reactjs react-hooks

3
推荐指数
1
解决办法
1956
查看次数

反应挂钩useCallback没有依赖

useCallback没有deps的情况下将其用于简单事件处理程序是否有意义?

例如:

const MyComponent = React.memo(() => {
  const handleClick = useCallback(() => {
    console.log('clicked');
  }, []);

  const handleOtherClick = () => {
    console.log('clicked');
  };

  return (
    <div>
      <button onClick={handleClick}>Click me</button>
      <button onClick={handleOtherClick}>Click me too</button>
    </div>
  );
});
Run Code Online (Sandbox Code Playgroud)

useCallback在这种情况下使用的利弊是什么?

javascript reactjs react-hooks

1
推荐指数
1
解决办法
725
查看次数