从 data.task 迁移到关于处理拒绝的民间故事
migrating from data.task to folktale on handling rejection
在 data.task
包中,我可以按如下方式解决或拒绝 api 调用:
import Task from 'data.task';
import fs from 'fs';
const readFile = (filename, enc) => {
return new Task((rej, res) =>
fs.readFile(filename, enc, (err, contents) => {
err ? rej(err) : res(contents);
})
);
};
我如何在 Task
的新 folktale
版本中实现这一点?我可以解决请求,但我该如何拒绝?我尝试了以下方法:
const {task, rejected} = require('folktale/concurrency/task');
import fs from 'fs';
const readFile = (filename, enc) => {
return task(res => {
fs.readFile(filename, enc, (err, contents) => {
err ? rejected(err) : res.resolve(contents);
});
});
};
const writeFile = (filename, contents) => {
return task(res => {
fs.writeFile(filename, contents, (err, success) => {
err ? rejected(err) : res.resolve(success);
});
});
};
const app = readFile('FILE_DOESNOT_EXIST.json', 'utf-8')
.map(contents => contents.replace(/8/g, '6'))
.chain(contents => writeFile('config1.json', contents));
app.run().listen({
onCancelled: () => {
console.log('the task was cancelled');
},
onRejected: () => {
console.log('something went wrong');
},
onResolved: value => {
console.log(`The value is Good`);
},
});
当我提供一个不存在的文件时,不会调用 onRejected 处理程序。
我希望看到什么:
由于我让程序读取了一个不存在的文件,它应该 运行 onRejected 应该记录 something went wrong
.
我现在看到了什么:
没有什么。该程序不会出错,但它也不会产生任何东西,它只是 运行 正常。
当使用 data.task
(Task 的旧版本)时,我可以使用 reject,这就是它在那里仍然有效的原因。现在如何使用新版本的 Task 执行此操作?
好吧,这真的很傻!出于某种原因,我无法立即在 doc.That 中找到此解决方案,因为我从 task
...
导入了 rejected
基本上来自任务的resolver
函数不仅有resolve
,还有reject
,这应该是显而易见的,但文档上没有。
所以这是工作代码:
import {task} from 'folktale/concurrency/task';
import fs from 'fs';
const readFile = (filename, enc) => {
return task(res => {
fs.readFile(filename, enc, (err, contents) => {
err ? res.reject() : res.resolve(contents);
});
});
};
const writeFile = (filename, contents) => {
return task(res => {
fs.writeFile(filename, contents, (err, success) => {
err ? res.reject() : res.resolve(success);
});
});
};
const app = readFile('confg.json', 'utf-8')
.map(contents => contents.replace(/8/g, '6'))
.chain(contents => writeFile('config1.json', contents));
app.run().listen({
onCancelled: () => {
console.log('the task was cancelled');
},
onRejected: () => {
console.log('something went wrong');
},
onResolved: value => {
console.log(`The value is Good`);
},
});
在 data.task
包中,我可以按如下方式解决或拒绝 api 调用:
import Task from 'data.task';
import fs from 'fs';
const readFile = (filename, enc) => {
return new Task((rej, res) =>
fs.readFile(filename, enc, (err, contents) => {
err ? rej(err) : res(contents);
})
);
};
我如何在 Task
的新 folktale
版本中实现这一点?我可以解决请求,但我该如何拒绝?我尝试了以下方法:
const {task, rejected} = require('folktale/concurrency/task');
import fs from 'fs';
const readFile = (filename, enc) => {
return task(res => {
fs.readFile(filename, enc, (err, contents) => {
err ? rejected(err) : res.resolve(contents);
});
});
};
const writeFile = (filename, contents) => {
return task(res => {
fs.writeFile(filename, contents, (err, success) => {
err ? rejected(err) : res.resolve(success);
});
});
};
const app = readFile('FILE_DOESNOT_EXIST.json', 'utf-8')
.map(contents => contents.replace(/8/g, '6'))
.chain(contents => writeFile('config1.json', contents));
app.run().listen({
onCancelled: () => {
console.log('the task was cancelled');
},
onRejected: () => {
console.log('something went wrong');
},
onResolved: value => {
console.log(`The value is Good`);
},
});
当我提供一个不存在的文件时,不会调用 onRejected 处理程序。
我希望看到什么:
由于我让程序读取了一个不存在的文件,它应该 运行 onRejected 应该记录 something went wrong
.
我现在看到了什么: 没有什么。该程序不会出错,但它也不会产生任何东西,它只是 运行 正常。
当使用 data.task
(Task 的旧版本)时,我可以使用 reject,这就是它在那里仍然有效的原因。现在如何使用新版本的 Task 执行此操作?
好吧,这真的很傻!出于某种原因,我无法立即在 doc.That 中找到此解决方案,因为我从 task
...
rejected
基本上来自任务的resolver
函数不仅有resolve
,还有reject
,这应该是显而易见的,但文档上没有。
所以这是工作代码:
import {task} from 'folktale/concurrency/task';
import fs from 'fs';
const readFile = (filename, enc) => {
return task(res => {
fs.readFile(filename, enc, (err, contents) => {
err ? res.reject() : res.resolve(contents);
});
});
};
const writeFile = (filename, contents) => {
return task(res => {
fs.writeFile(filename, contents, (err, success) => {
err ? res.reject() : res.resolve(success);
});
});
};
const app = readFile('confg.json', 'utf-8')
.map(contents => contents.replace(/8/g, '6'))
.chain(contents => writeFile('config1.json', contents));
app.run().listen({
onCancelled: () => {
console.log('the task was cancelled');
},
onRejected: () => {
console.log('something went wrong');
},
onResolved: value => {
console.log(`The value is Good`);
},
});