В то время как обещания и обратные вызовы хорошо работают во многих ситуациях, боль в задней части выражает нечто вроде:
if (!name) {
name = async1();
}
async2(name);
. В итоге вы пройдете через async1
; проверьте, не определено ли name
или нет, и соответственно вызовите обратный вызов.
async1(name, callback) {
if (name)
callback(name)
else {
doSomething(callback)
}
}
async1(name, async2)
Хотя в в порядке хорошо , это раздражает, когда у вас много подобных случаев и обработка ошибок.
Fibers
помогает в решении проблемы.
var Fiber = require('fibers')
function async1(container) {
var current = Fiber.current
var result
doSomething(function(name) {
result = name
fiber.run()
})
Fiber.yield()
return result
}
Fiber(function() {
var name
if (!name) {
name = async1()
}
async2(name)
// Make any number of async calls from here
}
Вы можете проверить проект здесь .
Вы должны использовать 4545454545l
или 4545454545L
, чтобы квалифицировать его как long
. По умолчанию, 4545454545
является int
литералом, а 4545454545
находится вне диапазона int
.
Рекомендуется использовать прописной алфавит L
, чтобы избежать путаницы, поскольку l
и 1
выглядят довольно похоже
Вы можете сделать:
if(Long.valueOf(4545454545l).equals(Long.parseLong(morse)) ){
System.out.println("2");
}
ИЛИ
if(Long.parseLong(morse) == 4545454545l){
System.out.println("2");
}
В соответствии с JLS 3.10.1 :
Целочисленный литерал имеет тип long, если он суффикс с буквой ASCII L или l (ell); в противном случае это тип int (п. 4.2.1).
Если ваше целочисленное значение больше, чем 2147483647
, в качестве вашего литерала вам нужно использовать длинный литерал:
4545454545L
... обратите внимание на L
в конце, что является разницей между длинным и int-литералом. В нижнем регистре l
тоже работает, но он менее читабельен, так как его легко путать с 1 (неважно, когда вы имеете дело с номером!) [/ G2]
Вы должны использовать 4545454545L
или 4545454545l
, чтобы квалифицировать его как долго.