小编JWA*_*pin的帖子

Bash:将“cat”重定向到不带换行符的文件

我有两个文件,我将它们连接成一个文件,但我还在两个文件之间添加用户输入。问题是在第一个文件之后插入换行符,其余部分按预期工作。

touch newFile
cat file1 > newFile
echo -n $userInput >> newFile
cat file2 >> newFile
Run Code Online (Sandbox Code Playgroud)

当 file1 添加到 newFile 时,如何防止或删除换行符?如果我cat file1似乎添加了换行符,cat但我看到的所有内容都cat表明它没有这样做。如果vim file1文件末尾没有空行,则表明换行符是文件的一部分,因此要么实际上cat添加换行符,要么重定向>正在执行此操作,或者echo在其输出的开头添加换行符,在这种情况下,这些都是不可取的。我看到的一种解决方案是使用

cat file1 | tr -d '\n'
Run Code Online (Sandbox Code Playgroud)

但这会丢弃文件中的所有换行符,这也是不可取的。所以,重复我的问题:

如何cat file1进入新文件并添加用户输入而不在它们之间添加换行符?

(cat不是必需的,但我不熟悉printf,所以如果这是解决方案,请详细说明其用途)。

linux bash command-line newline cat

7
推荐指数
1
解决办法
2万
查看次数

如何进行多个异步调用,然后在所有调用完成后执行函数?

我有一个 nodeJS Web 服务器,它调用另一个 api 来获取数据,然后(理想情况下)将该数据返回到网页。我正在使用 request-promise 库并尝试使用 Promise.all() 无济于事。

到目前为止我所拥有的:

app.get('/endpoint', (req, res) => {
  var url = 'some url';
  var dataObject = {};
  var promise1 = rp(url).then( (data) => {
    //process data into dataObject
  }
  url = 'another url';
  var promise2 = rp(url).then( (data) => {
    //process data into dataObject
  }
  //same thing for promise 3...
  Promise.all([promise1, promise2, promise3]).then(res.send(dataObject));
});
Run Code Online (Sandbox Code Playgroud)

问题是它res.send(dataObject)没有等待承诺完成,所以它发送了一个空对象。我对 Promise 不是很熟悉,我试图通过这个来了解更多关于它们的信息,但事情并没有像我期望的那样做。如果我猜测发生了什么,当调用rp().then(),.then()导致承诺解决,然后.then()在“解决”后执行里面的代码。

我想要的是里面的代码.then()来执行,然后一旦所有的承诺都完成了他们各自的数据处理,我希望它执行.all().then()返回该数据,但我将如何去做呢?

javascript asynchronous promise

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

标签 统计

asynchronous ×1

bash ×1

cat ×1

command-line ×1

javascript ×1

linux ×1

newline ×1

promise ×1