小编Ale*_*lls的帖子

将promise与递归函数一起使用

我试图找出是否有可能在递归函数中使用promise而不是标准回调。

我现在拥有的方式:

function recursive(data, cb){

     (function promiseProvider(data){

          return newThenable(data).then(function(val){
                 if(val.a){
                    cb(null, val);
                 }
                 else {
                    return promiseProvider(val);
                 }

          });

     })(data);

}
Run Code Online (Sandbox Code Playgroud)

这行得通,但是我无法弄清楚如何实现纯粹的promise实现。

也许这行得通吗?

  function recursive(data){

      return newThenable(data).then(function(val){
               if(val.a){
                  return // <<< ???
                 }
                 else {
                   return recursive(val);
                 }

        });

     }
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用。

javascript recursion node.js promise es6-promise

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

Bash 脚本仍在继续,即使我希望它早点退出

一段时间对此感到困惑,这里是一个代表问题的精炼脚本:

#start    
# note that master does not exist, so this should fail, would like to exit on the next line
git branch -D master || (echo "no master branch" && exit 1);
git fetch origin &&
git checkout master &&

BRANCH=$(git rev-parse --abbrev-ref HEAD)
if [[ "$BRANCH" != "master" ]]; then
  echo 'Aborting script because you are not on the right git branch (master).';
  exit 1;
fi

echo "done"
#end
Run Code Online (Sandbox Code Playgroud)

当我运行上面的脚本时,我得到以下输出:

error: branch 'master' not found.
no master branch …
Run Code Online (Sandbox Code Playgroud)

git bash sh

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

从缓冲区中删除多个字节的规范方法

假设我在Node.js中有一个简单的缓冲区,如下所示:

const bytes = Buffer.from('abcdefg');
Run Code Online (Sandbox Code Playgroud)

这个缓冲区实例有sliceconcat作为方法,但我真的不知道如何使用这些来基本上创建数组的pop/shift/splice的功能.

这里是缓冲区文档:https://nodejs.org/api/buffer.html

我基本上要做的是读取/删除前X个字节,如下所示:

function read(x){

// return the first x number of bytes from buffer
// and remove those bytes from the buffer
// side-effects be damned for the moment
}
Run Code Online (Sandbox Code Playgroud)

这就是我所拥有的,但它对我来说似乎很"错误",即使它似乎也有效:

let items = Buffer.from('abcdefg');

function read(x){
    const b = items.slice(0,x);
    items = items.slice(x,items.length);
    return b;
}

console.log(String(read(4)));
console.log(String(items));
Run Code Online (Sandbox Code Playgroud)

有一个更好的方法吗?

另外,我不确定读取是否是正确的单词,但pop会意味着一个数组...使用描述这个函数的功能是什么?

javascript buffer node.js node.js-buffer

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

Webpack 2.3.3 - TypeError:$ export不是函数

我有这个Webpack配置:

const path = require('path');

module.exports = {
  entry: ['babel-polyfill', './lib/index.js'],
  output: {
    path: path.resolve(__dirname + '/dist'),
    filename: 'suman.js'
  },
  module: {
    loaders: [
      {
        test: /\.js$/,
        loader: 'babel-loader',
        options: {
          presets: ['latest'],
          plugins: ['transform-runtime']
        }
      }
    ]
  },

  node: {
    assert: 'empty',
    buffer: 'mock',
    child_process: 'empty',
    cluster: 'empty',
    console: 'mock',
    constants: 'empty',
    crypto: 'empty',
    dgram: 'empty',
    dns: 'mock',
    domain: 'empty',
    events: 'empty',
    fs: 'empty',
    http: 'empty',
    https: 'empty',
    module: 'empty',
    net: 'mock',
    os: 'empty',
    path: 'empty',
    process: 'mock',
    punycode: …
Run Code Online (Sandbox Code Playgroud)

javascript node.js babeljs webpack-2 babel-loader

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

TS为什么在函数体内抱怨函数声明

我从TS中收到此错误:

在此处输入图片说明

很清楚为什么会发生错误:

function outer(){

   if (true) {
        function inner(){    // nested function declaration

       }
   }   
}
Run Code Online (Sandbox Code Playgroud)

但是我的问题是-为什么TS会抱怨这一点-在转换为ES5时应该避免一些技术原因,以避免嵌套函数声明吗?

函数表达式会是一个更好的选择,为什么?

javascript ecmascript-5 typescript typescript2.2

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

'--link'似乎无法连接两个Docker容器

我想在一个容器中运行MongoDB,这有效:

docker run -p 27017:27017 --name cdt -d mongo
Run Code Online (Sandbox Code Playgroud)

然后我想在另一个容器中运行服务器,如下所示:

docker run --name foo --link cdt:mongo exec /bin/bash -c "node server.js"
Run Code Online (Sandbox Code Playgroud)

node.js服务器尝试与mongodb建立连接localhost:27017,但无法建立连接.

有人知道为什么会这样吗?我没有正确连接容器吗?

请注意,我可以从容器外部成功连接到mongodb容器,但不能从"foo"容器内的服务器连接.

mongodb docker docker-link

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

包装bash命令是一个字符串

所以我有这个bash命令:

sqlite3 ${SUMAN_DATABASE_PATH}  "CREATE TABLE suman_run_info (run_id INTEGER, suman_id INTEGER, suite_id INTEGER, test_id INTEGER,
 name TEXT, value TEXT);" >> ${SUMAN_DEBUG_LOG_PATH}
Run Code Online (Sandbox Code Playgroud)

我想在我的编辑器中手动包装它.但是因为它主要是一个字符串,所以我似乎无法使用\字符包装它.

阿卡,这真的不会起作用,tmk:

sqlite3 ${SUMAN_DATABASE_PATH}  "CREATE TABLE suman_run_info \ (run_id INTEGER, suman_id INTEGER, suite_id INTEGER, test_id INTEGER,
 name TEXT, value TEXT);" >> ${SUMAN_DEBUG_LOG_PATH}
Run Code Online (Sandbox Code Playgroud)

如何包装此bash命令以使其适合100列或其他任何内容?

我正在寻找这样的东西:

sqlite3 ${SUMAN_DATABASE_PATH}  "CREATE TABLE suman_run_info (run_id INTEGER, 
     suman_id INTEGER, suite_id INTEGER, test_id INTEGER,
     name TEXT, value TEXT);" >> ${SUMAN_DEBUG_LOG_PATH}
Run Code Online (Sandbox Code Playgroud)

我已经读过相邻的字符串应该自动连接,所以这可能有用吗?

   sqlite3 ${SUMAN_DATABASE_PATH}  "CREATE TABLE suman_run_info" 
   "(run_id INTEGER, suman_id INTEGER, suite_id INTEGER, test_id INTEGER,"
     "name TEXT, value …
Run Code Online (Sandbox Code Playgroud)

bash shell

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

HTTP GET请求,查询字符串中包含许多项

我们使用查询字符串中包含大量数据的HTTP GET请求来表示要检索的集合的所有ID。

关于网址中查询字符串长度的限制,谷歌快速搜索显示:

RFC 3986也声明没有限制,但是由于DNS限制,主机名限制为255个字符(第2.3.3节)。Microsoft说,Internet Explorer中URL的最大长度为2,083个字符,URL的路径部分最多不超过2,048个字符。2009年5月1日

如果我们不使用IE,我是否应该担心可能超出查询字符串长度的限制?我确定我已经在Node.js Express服务器上看到了超出的限制,特别是当我在GET请求的查询字符串中包含表示图像的base64字符串时。

解决这个问题的好方法是什么?我们应该只使用HTTP POST请求吗?当然,我们不想为了避免此问题而将1个GET请求分解为1000个。

url get http query-string web

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

具有对象解构的相同变量名的多个声明

我有这种情况,我想在对象解构中多次使用相同的变量名:

let {body, response} = await requestp('get', `${cdtAPIUrl}/whitelist`, headers);
let parsedBody = await siamese.parse(body);
assert(parsedBody.success, 'response body should have a success property.');
assert(parsedBody.success.length === usernames.length, 'wrong number of items in response body array.');
let {body, response} = await requestp('get', `${cdtAPIUrl}/caches/whitelist`, headers);
let parsedBody = await siamese.parse(body);
Run Code Online (Sandbox Code Playgroud)

但是当我用 node 运行脚本时,node 会在运行前抱怨:

SyntaxError: Identifier 'body' has already been declared
Run Code Online (Sandbox Code Playgroud)

有两个问题使我无法获得简单的解决方案:

  1. 我不能用对象解构来做到这一点:

    let {a,b} = c; {a,b} = c; // not allowed

  2. 我无法重命名bodyor response,因为这是调用返回的内容。

我该怎么办?

也许最好的做法是这样的:

let {body,response} = ... …
Run Code Online (Sandbox Code Playgroud)

javascript node.js

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

如何使用本地mongodump数据恢复远程MongoDB服务器

我们有一个远程MongoDB服务器,我们在本地开发人员的机器上有mongodump数据.使用本地数据恢复远程MongoDB服务器数据的最佳方法是什么?我们可以使用mongo命令吗?

scp mongodb

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