Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bug с isPending #20

Closed
zerkalica opened this issue Nov 11, 2016 · 5 comments
Closed

Bug с isPending #20

zerkalica opened this issue Nov 11, 2016 · 5 comments

Comments

@zerkalica
Copy link

zerkalica commented Nov 11, 2016

Тут никогда не сработает ресорв b:

let a = new cellx.Cell((push, fail, oldValue) => {
  setTimeout(() => {
     push(1)
  }, 500)
  return oldValue || 0
});


let b = new cellx.Cell((push, fail, oldValue) => {
  setTimeout(() => {
     push(2)
  },700)
  return oldValue || 0
});

var c = new cellx.Cell(() => a.get() + b.get())
var d = new cellx.Cell(() => ({
  isPending: c.isPending(),
  c: c.get()
}))

d.subscribe((err, {value}) => {
  if (err) {
    console.error(err)
  }
  console.log('d.c = ' + value.c + ', d.isPending = ' + value.isPending)
})

const value = d.get()
console.log('start, d.c = ' + value.c + ', d.isPending = ' + value.isPending)


// "start, d.c = 0, d.isPending = false"
// "d.c = 1, d.isPending = true"

"d.c = 3, d.isPending = false" никогда не покажется.

http://jsbin.com/kuzuquzupe/edit?js,console

@Riim
Copy link
Owner

Riim commented Nov 11, 2016

isPending ячейки не влияет на isPending зависимых ячеек. Нужно как-то так:

let a = new cellx.Cell((push, fail, oldValue) => {
  setTimeout(() => {
     push(1)
  }, 500)
  return oldValue || 0
});

let b = new cellx.Cell((push, fail, oldValue) => {
  setTimeout(() => {
     push(2)
  },700)
  return oldValue || 0
});

let c = new cellx.Cell(() => a.get() + b.get());
let cPending = new cellx.Cell(() => a.isPending() + b.isPending());

@zerkalica
Copy link
Author

Я там в #7 спрашивал, тут еще раз спрошу, ты не считаешь нужным делать isPending наследуемым в computable-значениях? Это чем-то плохо или просто нет времени?

По сути пример с let cPending = new cellx.Cell(() => a.isPending() + b.isPending()); нарушение инкапсуляции, т.к. рассказываем cPending о a и b, хотя теоретически информацию можно вытянуть из c.

@Riim
Copy link
Owner

Riim commented Nov 11, 2016

Это чем-то плохо или просто нет времени?

да вроде не плохо, сейчас быстро не получилось сделать, завтра попробую ещё раз.

@Riim Riim closed this as completed in b72078d Nov 13, 2016
@Riim
Copy link
Owner

Riim commented Nov 13, 2016

Поправил в 1.6.68. Определение c нужно поправить так, чтобы в нём был вызов push:

var c = new cellx.Cell(push => { push(a.get() + b.get()); });

@Riim
Copy link
Owner

Riim commented Nov 14, 2016

С 1.6.70 push не обязателен.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants